Py3.6 :: ThreadPoolExecutor future.add_done_callback vs. concurrent.futures.as_completed Py3.6中的ThreadPoolExecutor的future.add_done_callback与concurrent.futures.as_completed有何区别?

3

我正在学习Py3.6中的concurrent.futures.ThreadPoolExecutor,对于使用future.add_done_callback(callback)concurrent.futures.as_completed(futures)之间的区别、优缺点有些困惑。

你何时会选择其中一个?如果我理解正确,两者的目的或多或少相同。#1在任务完成并且相应的future已经解决时立即调用callback(future)函数,而#2则按照任务完成和future解决的顺序返回futures对象

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

感谢任何关于此事的澄清。

1个回答

1
函数的定义在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还有超时参数用于回调。一般来说,如果处理多个futures,我们可以使用as_completed,而单个future则使用add_done_callback。总体而言,对于简单的程序,add_done_callback和as_completed都可以达到类似的目的。

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接