【发布时间】:2019-01-02 17:02:05
【问题描述】:
我正在使用 ThreadPoolExecutor 并行运行两个函数,fast() 和 slow()。如果fast() 返回非None 结果,我想使用它,否则,使用slow() 结果。这是一个例子:
from concurrent.futures import ThreadPoolExecutor
from time import sleep
def fast():
sleep(2)
return 'fast'
def slow():
sleep(4)
return 'slow'
def run_parallel():
with ThreadPoolExecutor() as executor:
fast_future = executor.submit(fast)
slow_future = executor.submit(slow)
fast_result = fast_future.result()
if fast_result is not None:
slow_future.cancel()
return fast_result
return slow_future.result()
print(run_parallel())
运行输出:
$ time python example.py
fast
real 0m4.058s
user 0m0.041s
sys 0m0.011s
由于fast() 返回一个非None 值,我预计这需要2 秒而不是4 秒,特别是因为我有那条线到slow_future.cancel()。
我的理想语法是这样的:
combined_future = fast_future.orElse(slow_future)
return combined_future.result()
我可以做些什么来获得这种预期的行为?
【问题讨论】:
标签: python future threadpoolexecutor