Python并发:等待几分之少的未来,然后取消其余的



我通常使用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

最新更新