python-3.x - Py3.6 :: ThreadPoolExecutor future.add_done_callback 与 concurrent.futures.as_completed
问题描述
我在 Py3.6 中学习concurrent.futures.ThreadPoolExecutor并且对使用之间的区别和利弊有点困惑
1 future.add_done_callback(回调)
2 concurrent.futures.as_completed(futures)
你什么时候会选择一个而不是另一个?如果我理解正确,两者的目的或多或少是相同的。#1callback(future)
在任务完成并且相应的未来已经结算后立即调用 fn,而 #2returns the futures object
按照任务完成和期货结算的顺序调用。
在这两种情况下,我们都可以使用 future.results() 检索返回值(或者如果引发异常,则引发 future.exception() )。
感谢您对此进行任何澄清。
解决方案
def as_completed(fs, timeout=None):
"""An iterator over the given futures that yields each as it completes.
add_done_callback 是期货类中的一个方法,是比 as_completed 更低级别的函数。本质上, as_completed 在内部使用 add_done_callback。as_completed 也有回调的超时参数。一般来说,如果使用多个future,我们可以使用as_completed,而add_done_callback 用于单个future。总体而言, add_done_callback 和 as_completed 都可以为更简单的程序实现类似的目标。
只是一个想法。我们可以使用 add_done_callback 为期货列表中的每个期货使用不同的回调函数,而 as_completed 可能只接受单个回调。
推荐阅读
- r - 如何对 read_html 中的 html 文档使用 xml/html 树视图?
- java - Jung API - 如何在两个现有节点之间添加新边缘
- python-3.x - 索引范围的一些问题,python 学生项目?
- python - 在数据框中获取 NaN 值但不知道为什么
- python - 无论如何要向预先存在的函数添加关键字参数?
- django - 如何将 django 项目上传到 github?
- bash - 如何使用 grep 获取字符串中的第 n 个数字字段?
- r - 删除重复项,在 R 中根据另一列优先删除哪些行
- mongodb - 如何为多个城市创建架构设置?
- bootstrap-datepicker - endDate 不应等于 startDate