Celery 任务生产者在大规模生产任务时,存在的内存累积问题

admin 2021年9月1日14:55:54评论103 views字数 795阅读2分39秒阅读模式

简述

在当前的项目中,由于项目需求,需要实现一个将一个大任务拆分成无数个子任务的功能。
而在这个功能实现的时候,由于拆分的子任务数量太大,导致内存占用一直攀升直至Out of Memory
为了解决这个问题,我曾经怀疑过由RabbitMQ的HeartBeat带来的内存泄露问题,但是在经过了tracemalloc内存分析之后,发觉这个问题的原因其实是Celery默认开启的一个小功能(坑)。

产生原因

Celery文档中,有一个参数Task.apply_async.add_to_parent,这个参数的主要作用是:
* add_to_parent (bool) – If set to True (default) and the task is applied while executing another task, then the result will be appended to the parent tasks request.children attribute. Trailing can also be disabled by default using the trail attribute

即,默认情况下,一个主任务在运行时产生的子任务会自动被添加到主任务children列表里,并且会跟踪其运行状态。
但是在当前的需求中,我们不需要对子任务的状态进行跟踪,所以只要将add_to_parent这个参数改为False即可。

task.apply_async(add_to_parent=False)

FROM :rickyhao.com | rickyhao.com

相关推荐: 红队工具:编写自定义Shellcode

备注 原文名称:Red Team Tooling: Writing Custom Shellcode 原文地址:https://www.praetorian.com/blog/red-team-tooling-writing-custom-shellcode/…

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2021年9月1日14:55:54
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   Celery 任务生产者在大规模生产任务时,存在的内存累积问题https://cn-sec.com/archives/499663.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息