python - 使用 multiprocessing.pool() 遍历列表
问题描述
我在N
文件列表上调用一个内存开销很大的函数。内存开销大的原因是由于许多因素在不修改函数的情况下无法解决,但是我已经使用multiprocessing
模块克服了内存泄漏问题。通过为每个N
文件创建一个子进程,然后调用pool.close()
,函数的内存以最小的开销被释放。我在以下示例中实现了这一点:
def my_function(n):
do_something(file=n)
return
if __name__ == '__main__':
# Initialize pool
for n in range(0,N,1):
pool = mp.Pool(processes=1)
results = pool.map(my_function,[n])
pool.close()
pool.join()
这正是我想要的:通过设置processes=1
,pool
一个文件一次运行一个 N
文件。在每个n
文件之后,我调用pool.close()
,它会关闭进程并将内存释放回操作系统。之前我根本没用multiprocessing
,只是for
循环,内存会一直累积,直到系统崩溃。
我的问题是
- 这是实现这一点的正确方法吗?
- 有没有更好的方法来实现这一点?
- 有没有办法一次运行多个进程(
processes>1
),并且在每个进程之后仍然释放内存n
?
我只是在学习multiprocessing
模块。我在multiprocessing
这里找到了很多例子,但没有一个专门针对这个问题。我会很感激我能得到的任何帮助。
解决方案
这是实现这一点的正确方法吗?
“正确”在这种情况下是一种价值判断。人们可以认为这是一种笨拙或巧妙的技巧。
有没有更好的方法来实现这一点?
是的。修复my_function
,使其不会泄漏内存。如果 Python 函数泄漏了大量内存,那么您可能做错了什么。
有没有办法一次运行多个进程(进程> 1),并且在每个 n 之后仍然释放内存?
是的。maxtasksperchild
创建Pool
. _
推荐阅读
- java - 将日期转换为字符串显示错误字段 DayOfYear 无法打印,因为值 234 超出了最大打印宽度 2
- ios - 更改输入到 AirPods 时,AVAudioEngine 停止运行
- amazon-web-services - AWS 有限多租户 IAM 角色
- javascript - 提交输入时警报框不起作用
- python - 如何获取我在 Pytorch 中放入 Dataloader 或从 0 到 100 读取图像的图像文件名?
- python - python获得具有k个元素的数组的最大偶数和
- swift - Swift: find out how many digits an integer has
- php - AWS Cognito PHP SDK - 无法验证客户端的秘密哈希
- r - fviz_pca_ind () inDL(x, as.logical(local), as.logical(now), ...) 中的错误:ICU 初始化失败:U_FILE_ACCESS_ERROR
- php - 如何在php的文本框中显示当前日期+当前时间+ 1小时