以前我有一个可以简化为的功能:
Class A():
def _run(id):
# do_something
return
def run():
for id in id_list:
proc = Process(
target=self._run,
args=(id),
)
proc.start()
return
即使在run()
函数返回后,在run()
中创建的子流程也将继续运行。
现在,建议我使用concurrent.futures
。所以我修改了一下代码:
def run():
executor = ThreadPoolExecutor(max_workers=len(id_list))
for id in id_list:
executor.submit(self._launch, (id))
return
但是似乎线程根本不运行。是因为run()
返回后执行程序被清除了吗?我也尝试使用ProcessPoolExecutor
,但后来得到TypeError: can't pickle _thread.lock objects
。
有人可以帮助我了解为什么ThreadPoolExecutor
不能按预期工作吗?