这是程序:

#!/usr/bin/python

import multiprocessing

def dummy_func(r):

pass

def worker():

pass

if __name__ == '__main__':

pool = multiprocessing.Pool(processes=16)

for index in range(0,100000):

pool.apply_async(worker, callback=dummy_func)

# clean up

pool.close()

pool.join()

我发现内存使用(包括VIRT和RES)一直持续到close()/ join(),有没有解决方法摆脱这个?我用2.7尝试了maxtasksperchild,但它也没有帮助.

我有一个更复杂的程序,调用apply_async()〜6M次,并且在~1.5M点我已经有6G RES,为了避免所有其他因素,我将程序简化为以上版本.

编辑:

原来这个版本效果更好,感谢大家的意见:

#!/usr/bin/python

import multiprocessing

ready_list = []

def dummy_func(index):

global ready_list

ready_list.append(index)

def worker(index):

return index

if __name__ == '__main__':

pool = multiprocessing.Pool(processes=16)

result = {}

for index in range(0,1000000):

result[index] = (pool.apply_async(worker, (index,), callback=dummy_func))

for ready in ready_list:

result[ready].wait()

del result[ready]

ready_list = []

# clean up

pool.close()

pool.join()

我没有放任何锁,因为我认为主进程是单线程的(回调或多或少像我读过的每个文档的事件驱动的东西).

我将v1的索引范围更改为1,000,000,与v2相同并进行了一些测试 – 这对我来说很奇怪v2甚至比v1快〜10%(33s vs 37s),也许v1做了太多的内部列表维护工作. v2绝对是内存使用的赢家,它从未超过300M(VIRT)和50M(RES),而v1曾经是370M / 120M,最好是330M / 85M.所有数字仅为3~4次测试,仅供参考.

python processpoolexector 释放内存_使用Python的multiprocessing.pool,内存使用量不断增长...相关推荐

  1. python查看运行内存占用_利用Python如何实时检测自身内存占用

    前言 最近在做文本统计,用 Python 实现,遇到了一个比较有意思的难题--如何保存统计结果. 直接写入内存实在是放不下,十几个小时后内存耗尽,程序被迫关闭.如果直接写入数据库吧,每次写入又太慢了, ...

  2. linux下运行python程序如何控制内存_用Python实现Linux系统占用指定内存,CPU满载,服务器压力测试,场景设计...

    背景 提出两个需求 占满系统CPU 占用大内存 通过上网查资料,做实验使用Python实现了上述两个需求. 先看效果 执行前 内存 CPU 执行后 内存 CPU 代码实现 环境说明:代码使用Pytho ...

  3. python变量存储 堆与栈内存内存_浅析JS中的堆内存与栈内存

    最近跟着组里的大佬面试碰到这么一个问题, Q:说说var.let.const的区别 A:balabalabalabla... Q:const定义的值能改么? A:你逗我?不能吧 不知道各位看官怎么想? ...

  4. python list存储对象_《python解释器源码剖析》第4章--python中的list对象

    4.0 序 python中的list对象,底层对应的则是PyListObject.如果你熟悉C++,那么会很容易和C++中的list联系起来.但实际上,这个C++中的list大相径庭,反而和STL中的 ...

  5. python核心语法题_《Python核心编程》第3章笔记

    语句和语法 # Python注释 \ 继续上一行(有两种例外情况一个语句不能使用反斜杠也可以跨行.在使用闭合操作符时,单一语句可以跨多行,例如:在含有小括号.中括号.花括号时可以多行书写.另外就是三引 ...

  6. python语言面试基础_【python面试指北】1.语言基础

    1. python是动态强类型的语言. 动态还是静态指的是编译器还是运行期确定类型 强类型指的是不会发生隐式类型转换.比如js能够执行1+"1",但是python不行,所以pyth ...

  7. python 清空所有对象_学习python第38天

    今天分享一下python的内存管理和隔代回收 对象的内存使用 赋值语句是语言最常见的功能了.但即使是最简单的赋值语句,也可以很有内涵.Python的赋值语句就很值得研究. a = 1 整数1为一个对象 ...

  8. 以下选项中python用于异常处理结构_《Python 程序设计》复习题

    目录 填空题 一.基础知识 二.序列 三.选择结构与循环结构和函数及面向对象.文件 选择题 一.Python 基础语法 二.基本数据类型 三.程序的控制结构 四.函数和代码复用 五.组合数据类型 六. ...

  9. python程序运行原理_谈谈 Python 程序的运行原理

    因为我的个人网站 restran.net 已经启用,博客园的内容已经不再更新.请访问我的个人网站获取这篇文章的最新内容,谈谈 Python 程序的运行原理 这篇文章准确说是『Python 源码剖析』的 ...

最新文章

  1. 视学算法第六轮送书活动,16本高质量书免费拿走!
  2. python lxml读写xml
  3. js indexof用法indexOf()定义和用法
  4. IOS -- UICollectionView里面的cell点击,点击一个cell改变其他cell的状态
  5. HashMap的四种访问方式
  6. html5+php调用android手机图片,html5+exif.js+canvas+php实现手机上传图片,图片损坏无法打开...
  7. 获取iview中表单组件Table的选中数据
  8. PHP如何快速读取大文件
  9. 边缘计算崛起!施耐德联手华胜天成打造胶囊数据中心,真正端到端交付
  10. 在Zephyr上使用malloc/new
  11. 标准紧固件孔、螺栓孔、自攻螺钉孔、螺纹孔、铆钉孔、腰孔、标准排水孔工艺及规范性公布
  12. 双硬盘安装win10和linux双系统,双硬盘安装 Win 10 和 Ubuntu 16.04 双系统
  13. 会员积分系统设计 1 内容说明
  14. 三星s8怎么分屏操作_三星Galaxy Z Fold2帮你应对快节奏生活
  15. 微信小程序来了,整理微信小程序学习教程网站
  16. 实时时钟(Real_Time Clock)电路--中微爱芯
  17. Xcode 发布测试包TestFlight
  18. Python实现isPrime()函数,参数为整数,要有异常处理。如果整数是质数,返回True,否则返回False。通过调用isPrime()函数,打印200以内的所有质数,以空格分割。
  19. 零经验小白的独游历程——俯视角45度游戏,人物用2D还是3D
  20. 解决办法:Ubuntu 16.04 【缺少依赖】导致出现该错误——ERROR: the following packages/stacks could not have their

热门文章

  1. nginx处理http(http变量篇)
  2. gitlab project项目迁移
  3. 基于HLS流媒体协议的视频加密方案
  4. Google Mock启蒙篇 [1] (Google C++ Mocking Framework for Dummies 翻译)
  5. Dockerd docker-containerd docker-containerd-shim runC
  6. springcloud 03_SpringCloud概述
  7. leetcode 790. Domino and Tromino Tiling | 790. 多米诺和托米诺平铺(暴力递归->DP)
  8. 【EasyUI】DataGrid实现表格的筛选过滤、排序
  9. 【计算机系统结构】第一周 课上笔记
  10. 【Java语法】比较两个字符串是否相等