为什么使用concurrent.futures而不是多处理池?

时间:2015-12-02 06:56:40

标签: python python-multithreading python-multiprocessing python-3.2 concurrent.futures

我无法理解为什么要使用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

但我仍然没有看到我从流程或线程池中没有获得的东西。这个新模块有什么优势?什么时候我应该在现有的池上使用它?

0 个答案:

没有答案