我认为试图捕捉并从OOM错误中恢复是非常困难的,如果不是不可能的话。你需要一个线程或进程来持续监控内存使用情况,当它检测到内存使用量太高时,会……确切地说是什么?终止正在处理任务的进程?尝试暂停它(如果可能的话;它可能不取决于你的任务在做什么)。即使这样,暂停也不会释放任何记忆。当任务安全时,你必须释放内存并重新启动任务,这意味着你必须重新排队,决定何时安全,等等

与其尝试检测并从中恢复过来,我建议尽量避免它。创建两个队列和两个池。一个队列/池用于高内存任务,另一个队列/池用于低内存任务。高内存池中只有一个进程,因此它只能并发运行一个任务,这样可以节省内存。低内存队列将有multiprocessing.cpu_count() - 1个进程,允许您在两个池中保持cpu饱和。在

这种方法的一个潜在问题是,如果您耗尽了高内存队列,同时仍有低内存任务等待处理,那么您将浪费一个CPU。您可以以非阻塞的方式(或使用超时)处理高内存队列中的这种消耗,以便在准备使用任务时,如果高内存队列为空,则可以获取低内存任务。然后当您完成处理后,再次检查高内存队列。在

像这样:import multiprocessing

# hi_q and lo_q are placeholders for whatever library you're using to consume from RabbitMQ

def high_mem_consume():

while True:

task = hi_q.consume(timeout=2)

if not task:

lo_q.consume(timeout=2)

if task:

process_task(task)

def low_mem_consume():

while True:

task = lo_q.consume() # Blocks forever

process_task(task)

if __name__ == "__main__":

hi_pool = multiprocessing.Pool(1)

lo_pool = multiprocessing.Pool(multiprocessing.cpu_count() - 1)

hi_pool.apply_async(high_mem_consume)

lo_pool.apply_async(lo_mem_consume)

python中uss的用法_使用不同内存ussag管理Python多进程进程进程相关推荐

  1. python中的浮点数用法_如何利用Python在运算后得到浮点数值的方法详解

    在python中进行两个整数相除的时候,在默认情况下都是只能够得到整数的值,而在需要进行对除所得的结果进行精确地求值时,想在运算后即得到浮点值,那么如何进行处理呢? 1.修改被除数的值为带小数点的形式 ...

  2. python中case的用法_用 Python 实现简单的 switch/case 语句

    在Python中是没有Switch / Case语句的,很多人认为这种语句不够优雅灵活,在Python中用字典来处理多条件匹配问题字典会更简单高效,对于有一定经验的Python玩家不得不承认,的确如此 ...

  3. python中content的用法_学python吗,教你5个python现学现用的有趣用法

    在我们使用python的过程中也会遇到一些有意思的用法,这里找到了一些总结有趣的 话不多说,接着看下去吧!!!!python高薪就业(视频.学习路线.免费获取)​shimo.im for-else用法 ...

  4. python中reduce函数用法_一文读懂reduce函数

    Python中的reduce函数是经常和map,filter一起被提到的函数,但是reduce的工作原理却不是那么直观,我们这里就来详细讲解一下这个函数. 首先先来看一下reduce函数的用法 imp ...

  5. python中result的用法_关于Python中的列表理解及用法

    在Python中,列表理解通常用于编写单行语句,这些语句通过可迭代对象进行迭代以创建新的列表或字典.本文首先介绍for循环如何在Python中工作,然后解释如何在Python中使用列表理解. Pyth ...

  6. python中with open用法_在线玩转python中with用法

    在本篇文章里小编给大家整理的是关于python中with用法讲解内容,有需要的朋友们可以参考下. 我们都知道打开文件有两种方法:f = open() with open() as f: 这两种方法的区 ...

  7. python中主函数用法_【Python 1-13】Python手把手教程之——详解函数和函数的使用...

    - 作者 | 弗拉德 来源 | 弗拉德(公众号:fulade_me) 定义函数 下面是一个打印问候语的简单函数,名为greet_user(): def greet_user(): "&quo ...

  8. python中isalpha的用法_关于isalpha()的详细介绍

    今天在写一个搜索组件时,我想根据搜索的是否是全部字母来选择搜索的字段.于是有下面的代码:if q.isalpha(): query = query.filter(User.username.ilike ...

  9. python中char的用法_如何从C++返回char **并使用cType在Python中填充它?

    我一直试图从C++返回一个字符串数组到Python,如下:// c++ code extern "C" char** queryTree(char* treename, float ...

最新文章

  1. redis作为mysql的缓存服务器(读写分离)
  2. 不同服务器之间进行传输
  3. java填空题 在非静态成员方法中_Java学习(四): 类的使用
  4. 遥控器按键不灵的修复方法
  5. MySQL介绍及安装(一)
  6. docker中安装了RabbitMQ后无法访问其Web管理页面
  7. eclipse和myeclipse的差别问题
  8. 怎么定义int_面试官问:MySQL的自增ID用完了,怎么办?!
  9. matlab根据给定3点画圆弧_圆弧齿廓面齿轮齿顶尖化研究
  10. Linux下的好用的图片压缩软件
  11. python科赫雪花正方形_python—科赫曲线(科赫雪花小包裹)
  12. 软件架构设计杂记: 好作品是改出来的,好的代码是不断重构打磨出来的, 心性是历经艰难困苦修炼出来的
  13. 深度学习平台——百度AI Studio线上构建
  14. Win10(家庭版)修改中文用户名为英文
  15. 智能算法系列之粒子群优化算法
  16. 荣耀6手机apk清单
  17. css3彩虹渐变色,css3渐变 彩虹条纹
  18. 模拟水面表面张力,效果自然、真实,北大图灵班研究入选SIGGRAPH
  19. FPGA几种电平:TTL,CMOS以及LVTTL,LVCMOS
  20. 图像处理----图像模糊(高斯模糊)

热门文章

  1. RabbitMQ-从基础到实战(3)— 消息的交换(上)
  2. js/jquery判断浏览器 停止加载
  3. 自定义滚动条Js简版
  4. MyBatis学习笔记(六)动态sql
  5. Js的Url中传递中文参数乱码的解决
  6. 最长公共子序列 nyoj-36
  7. 深入理解C++中的mutable关键字
  8. 各类数据类型的用法java_Java各种数据类型详细介绍及其区别
  9. (chap8 确认访问用户身份的认证) 基于表单认证
  10. C++ Primer 5th笔记(chap 13 拷贝控制)引用限定符