python concurrent.futures每个子进程的ProcessPoolExcutor任务

时间:2017-02-13 22:41:06

标签: python multiprocessing

有没有办法限制ProcessPoolExecutor中每个子进程的任务 concurrent.futures模块?

(比如在multiprocessing.Pool中)

https://docs.python.org/2/library/multiprocessing.html#multiprocessing.pool.multiprocessing.Pool

(参见maxtasksperchild arg)

2 个答案:

答案 0 :(得分:2)

简短的回答是否定的。没有机制可以跟踪concurrent.futures.ProcessPoolExecutor中工作人员执行的任务数量。因此,如果不修改python的内部代码,就无法做到。

解决方案可能是在loky中实现此功能。这是一个用于改进concurrent.futures.ProcessPoolExecutor并修复其中一些错误的库。它为工作程序超时提供了一种机制,并且可以很容易地实现一个任务计数器" timeout"到达maxtasks时如果你需要这个功能,我建议在loky repo上提出一个问题。

答案 1 :(得分:0)

Pebble支持。

from pebble import ProcessPool

def function(foo, bar=0):
    return foo + bar

with ProcessPool(max_workers=5, max_tasks=10) as pool:
    for i in range(0, 100):
        future = pool.schedule(function, args=[i])
        future.result()