multiprocessing Pool(processes=n) 如何处理过多的 Pool 请求?
How does multiprocessing Pool(processes=n) handle excessive Pool requests?
假设我有如下代码——我需要 运行 一个函数(具有不同的参数)x 次。但是,我的池数较少——例如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 将尝试同时处理 4 个 Pool 中的所有 8 个,处理这个问题的最佳方法是什么? (我可以将 with Pool
代码放在一个循环中,一次只使用 4 个池。)
我阅读了文档,但我不清楚。
在Pool
的第一个参数中传递的数字是池中的工作进程数(在本例中为 4)。 map 函数将 运行 每个参数。每次工作人员完成时,它都可以用于 运行 另一个参数。
为了说明这一点,请考虑以下内容:
import time
def my_func(r):
if r == 1:
time.sleep(120)
return r * r
首先会发生的事情是 4 运行 将派遣工人。除了 r == 1
之外,所有这些几乎都会立即完成。当工作人员完成时,工作人员正在 re-used 进行另一个输入。因此,在示例中,7 个工人几乎会立即完成,但最后一个工人大约需要 2 分钟。由于 map 函数将等待所有工作人员完成 return 结果,因此 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 个进程在等待.
假设我有如下代码——我需要 运行 一个函数(具有不同的参数)x 次。但是,我的池数较少——例如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 将尝试同时处理 4 个 Pool 中的所有 8 个,处理这个问题的最佳方法是什么? (我可以将 with Pool
代码放在一个循环中,一次只使用 4 个池。)
我阅读了文档,但我不清楚。
在Pool
的第一个参数中传递的数字是池中的工作进程数(在本例中为 4)。 map 函数将 运行 每个参数。每次工作人员完成时,它都可以用于 运行 另一个参数。
为了说明这一点,请考虑以下内容:
import time
def my_func(r):
if r == 1:
time.sleep(120)
return r * r
首先会发生的事情是 4 运行 将派遣工人。除了 r == 1
之外,所有这些几乎都会立即完成。当工作人员完成时,工作人员正在 re-used 进行另一个输入。因此,在示例中,7 个工人几乎会立即完成,但最后一个工人大约需要 2 分钟。由于 map 函数将等待所有工作人员完成 return 结果,因此 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 个进程在等待.