python - 多处理池中的内存使用过多
问题描述
我有一个使用 python 多处理池的代码。但它正在使用过多的内存。我已经测试了 pool.map 和 pool.imap_unordered,但是,它们都使用相同数量的内存。下面是我的代码的简化版本。
import random, time, multiprocessing
def func(arg):
y = arg**arg # Don't look into here because my original function is
# much complicated and I can't change anything here.
print y
p = multiprocessing.Pool(24)
count = 0
start = time.time()
for res in p.imap_unordered(func, range(48000), chunksize=2):
#for res in p.map(func, range(48000), chunksize=2):
print "[%5.2f] res:%s count:%s"%(time.time()-start, res, count)
count += 1
该函数将输出保存在文件中,并且没有任何返回语句。上面的代码占用: p.map: CPU Utilized: 03:18:31, Job Wall-clock time: 00:08:17, Memory Utilized: 162.92 MB p.imap_unordered: CPU Utilized: 04:00:13, Job Wall -时钟时间:00:10:02,已使用内存:161.16 MB
我总共有 128GB 的内存,我的原始代码由于内存超出而停止。map 和 imap_unordered 都显示相同的问题。我期待 imap_unordered 占用更少的内存。我应该修改什么以减少内存消耗而不改变 func (原来的)?
解决方案
推荐阅读
- firebase - Firestore 进行最后一次更新
- node.js - Mocha/Chai 测试返回错误消息,我找不到测试它的方法
- javascript - 如何向 Angular Material datepicker 的所有实例添加指令?
- r - 将用户输入与分组数据进行比较
- postgresql - 错误:无效的正则表达式:在 Postgres 11.0 中执行左连接时括号 () 不平衡
- azure-logic-apps - Add an Azure AD user to a Azure DevOps project group using Azure Logic Apps
- shell - 检查字符串是否计算为 zsh 中变量的名称 - 间接扩展
- swift - 如何动画删除使用 ForEach 循环创建的视图从 SwiftUI 中的 ObservableObject 获取其数据
- android - Android如何在不改变视图可见性的情况下调用绑定适配器?
- node.js - 使用 Sequelize 为请求 Node.Js 中给出的现有字段更新数据库