多处理池(processes=n)如何处理过多的池请求



假设我有如下代码——其中我需要运行一个函数(具有不同的参数(x次。但是,我的Pool计数较少,例如x/2。

args_list = []
# Range(8) is just an example. My args are more complex.
for r in Range(8):
args_list.append(r)
with Pool(4) as proc_pool:
results = proc_pool.map(my_func, args_list)
proc_pool.close()
proc_pool.join()

Pool一次只处理4个池,然后转到下一个4,还是一次处理所有8个池,但只在4个池中处理

如果Pool将尝试同时处理所有8个池中的4个池,那么处理此问题的最佳方法是什么?(我可以把with Pool代码放在一个循环中,一次只使用4个池。(

我阅读了文档,但我不清楚。

Pool的第一个参数中传递的数字是池中工作进程的数量(在本例中为4(。map函数将在每个参数上运行。每当一个工作者完成时,它就可以用来运行另一个参数。

为了说明这一点,请考虑以下内容:

import time
def my_func(r):
if r == 1:
time.sleep(120)
return r * r

将要发生的第一件事是,将向工人发送4次跑步。除了r == 1的那一个,它们几乎都会立即完成。当工作人员完成时,该工作人员将被重新用于另一个输入。因此,在这个例子中,7名工人几乎会立即完成,但最后一名工人大约需要2分钟。由于map函数将等待所有工作人员完成返回结果,因此map函数将需要2分钟才能完成。

举另一个例子:

import time
def my_func(r):
if r in (1, 3, 5, 7):
time.sleep(120)
return r * r

一半的跑步将几乎立即完成,其中4次跑步需要2分钟。如果五次运行需要2分钟(比如r in (1, 2, 3, 5, 7)(,那么总时间将为4分钟,因为2分钟内有4个进程在等待,2分钟内则有1个进程在等候。

相关内容

  • 没有找到相关文章

最新更新