欢迎访问 生活随笔!

ag凯发k8国际

当前位置: ag凯发k8国际 > 编程语言 > python >内容正文

python

python有内存处理模块吗-ag凯发k8国际

发布时间:2024/10/14 python 36 豆豆
ag凯发k8国际 收集整理的这篇文章主要介绍了 python有内存处理模块吗_使用python多处理的高内存使用 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

我已经看到一些使用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多处理的高内存使用的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得ag凯发k8国际网站内容还不错,欢迎将ag凯发k8国际推荐给好友。

网站地图