python有内存处理模块吗-ag凯发k8国际
我已经看到一些使用python多处理模块的内存使用的帖子.但问题似乎并不能解决我在这里遇到的问题.我发表了我的分析,希望有人能帮助我.
问题
我正在使用多进程并行执行任务,我注意到,工作进程的内存消耗无限期增长.我有一个小的独立的例子,应该复制我注意到的.
import multiprocessing as mp
import time
def calculate(num):
l = [num*num for num in range(num)]
s = sum(l)
del l # delete lists as an option
return s
if __name__ == "__main__":
pool = mp.pool(processes=2)
time.sleep(5)
print "launching calculation"
num_tasks = 1000
tasks = [pool.apply_async(calculate,(i,)) for i in range(num_tasks)]
for f in tasks:
print f.get(5)
print "calculation finished"
time.sleep(10)
print "closing pool"
pool.close()
print "closed pool"
print "joining pool"
pool.join()
print "joined pool"
time.sleep(5)
系统
我正在运行windows,我使用任务管理器来监视内存使用情况.我正在运行python 2.7.6.
意见
我已经总结了下面的2个工作进程的内存消耗.
--------------- ---------------------- ----------------------
| num_tasks | memory with del | memory without del |
| | proc_1 | proc_2 | proc_1 | proc_2 |
--------------- ---------------------- ----------------------
| 1000 | 4884 | 4694 | 4892 | 4952 |
| 5000 | 5588 | 5596 | 6140 | 6268 |
| 10000 | 6528 | 6580 | 6640 | 6644 |
--------------- ---------------------- ----------------------
在上表中,我尝试更改任务数量,并观察在所有计算结束之前和加入池之前消耗的内存. “del”和“without del”选项是否分别对calculate(num)函数中的del l行进行注释或注释.计算前,内存消耗量约为4400.
>看起来手动清除列表的结果是工作进程的内存使用量较低.我以为垃圾收集器会照顾这个.有办法强制垃圾收集吗?
>令人困惑的是,随着任务数量的增加,这两种情况下的内存使用量不断增加.有没有办法限制内存使用?
我有一个基于这个例子的过程,意在长期运行.我观察到这个工作进程在过夜运行之后占用了大量的内存(〜4gb).做一个连接来释放内存不是一个选择,我试图找出一种没有加入的方式.
这似乎有点神秘.有人遇到过类似的事情吗?如何解决这个问题?
总结
以上是ag凯发k8国际为你收集整理的python有内存处理模块吗_使用python多处理的高内存使用的全部内容,希望文章能够帮你解决所遇到的问题。
- 上一篇: java反射机制详解_java反射机制详
- 下一篇: java相对目录_java相对目录和绝对