python - 多次调用时的 multiprocessing.Pool 行为
问题描述
根据我的观察,我有一个非常简单的问题:
让我们考虑以下代码:
import multiprocessing as mp
def f(x,y):
# Do heavy stuff
N = 8
param_to_test = [(x,y) for x in range(1000) for y in range(1000)]
with mp.Pool(processes = N) as p:
p.starmap(f, param_to_test)
param_to_test = [(x,y) for x in range(1000, 2000) for y in range(1000, 2000)]
with mp.Pool(processes = N) as p:
p.starmap(f, param_to_test)
param_to_test = [(x,y) for x in range(2000, 3000) for y in range(2000, 3000)]
with mp.Pool(processes = N) as p:
p.starmap(f, param_to_test)
我们还假设每次迭代的持续时间是恒定的。我观察到,如果我mp.Pool()
在我的主程序中多次调用,最后一个(似乎)比第一个慢得多。
在我的实际程序中,在每次调用with mp.Pool()
, param_to_test 之前,都是根据前一个计算得出的。我知道在 python 中生成过程实际上并不快,并且可能有比生成 3 次(或更多......)相同Pool()
的工人更好的编码方法。但是,在我的情况下,这个持续时间可以忽略不计。
我的问题是: Python 是否每次都正确关闭,Pool()
并且在我的行为中没有任何我不知道的问题Pool()
可以解释计算的逐渐减慢吗?
谢谢 :)
解决方案
推荐阅读
- c++ - 垃圾值被初始化为我的哈希表的值,即使我专门将所有索引编码为 -1
- javascript - 防止在 Paper JS 中显示上下文菜单
- java - 解决“浮点上下文中的整数除法”警告
- php - 如何创建表并向其中插入数据?
- apache - Mod rewrite 将每个子目录重定向到同一个文件
- android - 为什么在 if 语句中取不到值?
- sql - 如何从数据库表中获取列表最新条目以获取特定列的值列表?
- design-patterns - SysML中的流式接口
- node.js - 在android上卸载节点和npm?
- github - !npx 数字在 Google Colab 中如何工作?