【发布时间】:2023-03-20 09:20:01
【问题描述】:
我有一段代码将任务提交给ThreadPoolExecutor,它启动Process。我已经意识到在 Python 3.8 中 Process 以退出代码 0 结束。但是我已经将 Python 更新到了 3.9 版本,这开始以退出代码 1 结束!即使进程执行一个空任务。
这是一个最小的例子:
from multiprocessing import Process
from concurrent.futures import ThreadPoolExecutor
def some_task():
pass
def execute_error():
p = Process(target=some_task)
p.start()
p.join()
print(p.exitcode) # This is always 1 on a ThreadPoolExecutor!!!
executor = ThreadPoolExecutor(max_workers=4)
executor.submit(execute_error)
# execute_error() # IMPORTANT: this works correctly (exit 0)
我的版本:
Ubuntu 21.04
Python 3.9.4
注意,如果在 ThreadPoolExecutor 之外调用 __execute_error,它会正常工作。我失踪了吗?这是 Python 3.9 的错误吗?有什么解决方法吗?任何形式的帮助将不胜感激
【问题讨论】:
-
有趣的发现。我可以确认 3.8/3.9 的差异。另外,
ProcessPoolExecutor似乎总是按预期返回 0,只有ThreadPoolExecutor受到影响。 -
我已经向 Python 问题跟踪器提交了一个同名问题
-
这很尴尬!您能否留下您为后代发布的问题的链接?
-
是的,抱歉!我在没有链接的手机上发表了评论。这是:bugs.python.org/issue43944
标签: python-3.x python-multiprocessing python-3.8 python-3.9