4

我无法理解为什么要使用concurrent.futures模块。ProcessPoolExecutor似乎可以与进程的多处理池相媲美,同样适用于ThreadPoolExecutor与线程的multiprocessing.dummy模块(甚至是未记录的multiprocessing.pool.ThreadPool)。

例如,如果我想同时映射一些函数调用并返回一个迭代器,我可以像这样使用多处理:

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

但是我仍然看不到我可以从中获得什么,而我还没有从进程或线程池中获得什么。这个新模块有什么优势,我什么时候应该在现有池上使用它?

4

0 回答 0