gpt4 book ai didi

python - concurrent.futures ThreadPoolExecutor 等待失败?

转载 作者:行者123 更新时间:2023-11-28 23:01:47 24 4
gpt4 key购买 nike

我正在尝试使用 concurrent.futures 中的 ThreadPoolExecutor 来提高脚本性能。我正在通过 Popen 启动一些外部 python 脚本并将它们封装为 future 对象,但这些对象在完成时进入回调函数,但我可以看到它们在我的机器上运行(它们运行了好几分钟)。代码如下所示:

with futures.ThreadPoolExecutor(max_workers=4) as executor: 
p1 = executor.submit(subprocess.Popen([myotherPythonscript1], stdout = subprocess.PIPE))
p1.add_done_callback(process_result)
p2 = executor.submit(subprocess.Popen([myotherPythonscript2], stdout = subprocess.PIPE))
p2.add_done_callback(process_result)

def process_result( future ):
logger.info( "Seeding process finished...")

我还尝试了使用 running() 和 wait() future 函数的不同方法,但结果相同。 future 的对象被标记为已经完成,但实际上它们仍在运行。我错过了什么吗?

谢谢,

最佳答案

你不能只将 Popen 的结果传递给你的执行者,你必须传递一个可调用对象。

>>> from concurrent.futures import *
>>> from subprocess import *
>>> executor = ThreadPoolExecutor(4)
>>> future = executor.submit(Popen(['echo', 'test'], stdout=PIPE))
>>> future.exception()
TypeError("'Popen' object is not callable",)

另一方面,这是可行的:

from concurrent.futures import *
from subprocess import *

def make_call():
process = Popen(['echo', 'test'], stdout=PIPE)
return process.communicate()[0]

executor = ThreadPoolExecutor(4)
future = executor.submit(make_call)
print(future.result())

关于python - concurrent.futures ThreadPoolExecutor 等待失败?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10584290/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com