gpt4 book ai didi

python - 并发 future 等待任务的子集

转载 作者:太空宇宙 更新时间:2023-11-04 04:40:59 25 4
gpt4 key购买 nike

我正在使用 Python 的 concurrent.futures框架。我已经使用 map() 函数来启动并发任务:

def func(i):
return i*i

list = [1,2,3,4,5]
async_executor = concurrent.futures.ThreadPoolExecutor(5)
results = async_executor.map(func,list)

我只对第一个 n 结果感兴趣,并且想在第一个 n 线程完成后停止执行程序,其中 n 是一个小于输入列表大小的数字。有没有办法在 Python 中做到这一点?我应该研究另一个框架吗?

最佳答案

您不能为此使用 map(),因为它无法提供停止等待结果的方式,也无法提供任何方式来获取已提交的 future 并取消它们。但是,您可以使用 submit() 来完成:

import concurrent.futures
import time

def func(i):
time.sleep(i)
return i*i


list = [1,2,3,6,6,6,90,100]
async_executor = concurrent.futures.ThreadPoolExecutor(2)
futures = {async_executor.submit(func, i): i for i in list}
for ii, future in enumerate(concurrent.futures.as_completed(futures)):
print(ii, "result is", future.result())
if ii == 2:
async_executor.shutdown(wait=False)
for victim in futures:
victim.cancel()
break

上面的代码运行大约需要 11 秒——它执行作业 [1,2,3,6,7] 但不执行其余的。

关于python - 并发 future 等待任务的子集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50652724/

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