首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >并发期货等待任务子集

并发期货等待任务子集
EN

Stack Overflow用户
提问于 2018-06-02 01:26:11
回答 1查看 2.9K关注 0票数 3

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

代码语言:javascript
运行
复制
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中有什么方法可以做到吗?我还需要研究另一个框架吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-06-02 02:04:38

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

代码语言:javascript
运行
复制
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,而不执行其余的作业。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50652724

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档