python - 为什么把subprocess放在thread里执行?
怪我咯
怪我咯 2017-04-18 09:44:06
[Python讨论组]

完整代码在这里:https://github.com/kennethrei...

请看59行的run函数,为什么要在线程里运行subprocess,而不是直接运行?


附run函数定义:

def run(self, data, timeout, kill_timeout, env, cwd):
    self.data = data
    environ = dict(os.environ)
    environ.update(env or {})

    def target():

        try:
            self.process = subprocess.Popen(self.cmd,
                universal_newlines=True,
                shell=False,
                env=environ,
                stdin=subprocess.PIPE,
                stdout=subprocess.PIPE,
                stderr=subprocess.PIPE,
                bufsize=0,
                cwd=cwd,
            )

            if sys.version_info[0] >= 3:
                self.out, self.err = self.process.communicate(
                    input = bytes(self.data, "UTF-8") if self.data else None
                )
            else:
                self.out, self.err = self.process.communicate(self.data)
        except Exception as exc:
            self.exc = exc


    thread = threading.Thread(target=target)
    thread.start()

    thread.join(timeout)
    if self.exc:
        raise self.exc
    if _is_alive(thread) :
        _terminate_process(self.process)
        thread.join(kill_timeout)
        if _is_alive(thread):
            _kill_process(self.process)
            thread.join()
    self.returncode = self.process.returncode
    return self.out, self.err
怪我咯
怪我咯

走同样的路,发现不同的人生

全部回复(1)
大家讲道理

自问自答:
貌似是为了设置timeout...subprocess本身不支持timeout

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号