我通常使用concurrent.futures.ThreadPoolExecutor
在Python中同时执行任务。
在执行所需的时间方面,有一个非常漫长且非确定性的函数(它获得代理,发送HTTP请求等(。
我想称之为几次(假设2(,这是我变得复杂的时候:
当任务完成一个一个时,我想检查其返回值,如果它是真的,请继续执行代码路径,我不再关心第二个任务,并且在那里不需要等待它。
但是,如果返回值是错误的,我想等待第二个任务完成,然后继续使用代码。
我试图在这里的几个地方看,所以像这个python并发问题,但仍然不明白如何做。
您可以使用recter_when = first_completed选项使用conturrent.futures.hewait(该选项将等待多个期货,但在任何一个完成后立即返回(。但更简单的是使用并发。futures.as_completed,它为您提供了一个迭代器,该迭代器将返回期货完成或取消期货。
f1 = executor.submit(job_1)
f2 = executor.submit(job_2)
for f in concurrent.futures.as_completed((f1,f2)):
if f.completed() and f.result():
# a job completed and returned True, so skip the rest
break
else:
# handle case where none of the tasks succeeded
pass
# normal code path