python - 为什么 python 期货中的 FIRST_COMPLETED 不早点返回?
问题描述
我有这个代码:
from concurrent.futures import ThreadPoolExecutor, wait, as_completed, FIRST_COMPLETED
from time import sleep
from random import randint
def return_after_5_secs(num):
sleep(randint(1, 5))
return "Return of {}".format(num)
if __name__ == '__main__':
pool = ThreadPoolExecutor(5)
futures = []
for x in range(5):
futures.append(pool.submit(return_after_5_secs, x))
done, not_done = wait(futures, return_when=FIRST_COMPLETED)
print(f"done: {done}")
print(f"not_done: {not_done}")
for f in done:
print(f.result())
我们可以通过定义何时返回来控制等待函数的行为。我们可以将这些值之一传递给函数的 return_when 参数:FIRST_COMPLETED、FIRST_EXCEPTION 和 ALL_COMPLETED。默认情况下,它设置为 ALL_COMPLETED,因此等待函数仅在所有期货完成时才返回。但是使用该参数,我们可以选择在第一个未来完成或第一个异常遇到时返回。
但为什么我的结果是这样的:
/usr/local/bin/python3.9 /Users/JeffreyWan/python-tutorial/futures/wait.py
done: {<Future at 0x10f1efa90 state=finished returned str>, <Future at 0x10f1efdc0 state=finished returned str>}
not_done: {<Future at 0x10f227130 state=running>, <Future at 0x10f227460 state=running>, <Future at 0x10f2277f0 state=running>}
Return of 0
Return of 1
Process finished with exit code 0
似乎 2 个期货在完成部分。为什么会有...超过1个?
解决方案
推荐阅读
- javascript - 在 Datatable 上设置自动对焦 - $.focus() 不进行更改
- python - 检查失败:DeviceNameUtils::ParseFullName(new_base, &parsed_name)
- reactjs - 重定向后保留 Firebase 身份验证凭据
- php - Pyrocms 更换弹头
- php - 在 Laravel 中为多行插入中的字段设置固定值
- reactjs - 如何将我的图片从 react 中存储在 firebase 中?
- angular - 仅在媒体查询的情况下,角度材料菜单单击不起作用
- tensorflow - 如何限制 Tensorflow 的权重张量具有相同的行变量?表示正在更新中,仍然保持不变
- c# - 动态对象的 JSON
- php - 密码验证不起作用