Py3.6 :: ThreadPoolExecutor future.add_done_callback与并发.futures.as_completed

时间:2018-09-01 20:00:00

标签: python-3.x

我正在Py3.6中学习concurrent.futures.ThreadPoolExecutor,但对于使用之间的优缺点有一些困惑

1 future.add_done_callback(callback)

2 concurrent.futures.as_completed(futures)

您何时会选择一个?如果我正确理解目的,则两者在或多或少上都是相同的。.#1在任务完成且相应的未来已经确定后立即调用callback(future) fn,而#2 returns the futures object的顺序是任务完成,期货结算。.

在两种情况下,我们都可以使用future.results()检索返回的值(或者如果引发异常,则引发future.exception()。)

感谢您对此做任何澄清。

1 个答案:

答案 0 :(得分:0)

函数的定义位于https://github.com/python/cpython/blob/f85af035c5cb9a981f5e3164425f27cf73231b5f/Lib/concurrent/futures/_base.py#L200

def as_completed(fs, timeout=None):
    """An iterator over the given futures that yields each as it completes.

add_done_callback是Futures类中的一种方法,它的功能比as_completed低。本质上,as_completed在内部使用add_done_callback。 as_completed还具有用于回调的超时参数。 通常,如果处理多个期货,我们可以使用as_completed,而将add_done_callback用于单个期货。 总体而言,对于简单的程序,add_done_callback和as_completed均可达到相似的目标。

只是一个想法。我们可以通过add_done_callback在期货列表中为每个期货使用不同的回调函数,而as_completed可能只接受单个回调。