我无法理解为什么要使用concurrent.futures模块。 ProcessPoolExecutor似乎与进程的multiprocessing pool相当,同样对于线程的ThreadPoolExecutor vs multiprocessing.dummy模块(甚至是未记录的multiprocessing.pool.ThreadPool)。< / p>
例如,如果我想同时映射一些函数调用并返回一个迭代器,我可以像这样使用多处理:
import multiprocessing
bar = [some list]
pool = multiprocessing.Pool()
results = pool.imap(foo, bar)
或者我可以将concurrent.futures与ProcessPoolExecutor一起使用,如下所示:
from concurrent.futures import ProcessPoolExecutor
bar = [some list]
with ProcessPoolExecutor() as pool:
results = pool.map(foo, bar)
似乎concurrent.futures提供了在异步调用完成之前取消它们的能力,但是多处理池提供了更多可以根据您的需求进行选择和定制的方法,这使得它更加灵活(迄今为止)正如我所知道的那样,增加了很多复杂性。
我已经阅读了concurrent.futures模块上的几个资源:
http://www.developer.com/lang/other/using-the-new-python-32-concurrent-programming-features.html
http://eli.thegreenplace.net/2013/01/16/python-paralellizing-cpu-bound-tasks-with-concurrent-futures
https://gist.github.com/mangecoeur/9540178
但我仍然没有看到我从流程或线程池中没有获得的东西。这个新模块有什么优势?什么时候我应该在现有的池上使用它?