为什么把subprocess放在thread里执行?

完整代码在这里: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
阅读 5.7k
1 个回答

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

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题