hi,你好!欢迎访问本站!登录
本站由网站地图腾讯云宝塔系统阿里云强势驱动
当前位置:首页 - 教程 - 杂谈 - 正文 君子好学,自强不息!

django & celery - 关于并发处置惩罚才能和内存运用的小结

2019-11-18杂谈搜奇网43°c
A+ A-

背景

尽人皆知,celery 是python天下里处置惩罚分布式使命的好助手,它的涌现连系给予了我们壮大的处置惩罚异步要求,分布式使命,周期使命等庞杂场景的才能。

 

然鹅,本日我们所要议论的则是怎样更好的在运用celery, 重要议论的点针是对内存的运用方面。

 

django & celery & django-celery  

 

楼主的项目中运用的是 celery 和 django 的相连系的体式格局,版本离别为:

python == 2.7 celery==3.1.25 Django==1.11.7 django-celery==3.2.2
  

 

celery 处置惩罚并发

 

项目中运用celery beat 来触发定时使命;而且依据营业需求,离别运用了2个 celery worker 来处置惩罚异步要求。

 

在开辟环境下,操作系统有4个processors, 内存为8GB。在默许状况下,启动celerycelery beat 和 两个 worker 后,并发状况以下:

 

 

能够看到,默许状况下,celery 会依据processor的数目(4个)来启动响应数目的worker

celery 许可我们经由过程设置 ‘CELERYD_CONCURRENCY ’   来 掌握 celery worker 并发数 。 

 

当修正celery worker 为 tasksWorker 的 worker 的设置为: CELERYD_CONCURRENCY = 2 后,worker数目以下图:

 

我们能够看到, 只要 2个 worker 被启动

 

celery worker 关于内存

网上有不少帖子剖析过 celery worker 关于内存的运用,发明worker在处置惩罚完使命后并没有开释内存。然则,celery供应了一个设置许可我们制订每一个worker处置惩罚使命的最大数目 (CELERYD_MAX_TASKS_PER_CHILD),当一个worker处置惩罚使命的数目抵达制订数目后,celery会烧毁该worker而且重新启动一个新的。

 

当 CELERYD_MAX_TASKS_PER_CHILD  = 5 时,worker运转屡次后,能够看到 旧的worker 被烧毁,新的 worker 被启动。

 

旧的 worker :

 

 

 

 新的 worker :

 

 

另外,当我们连系运用 django 和 celery是,须要封闭 Debug 设置,由于开启会引起celery beat 的 memory leak。 详细描述请看:https://stackoverflow.com/questions/45366680/celerybeat-process-consumes-all-os-memory 

 

  选择打赏方式
微信赞助

打赏

QQ钱包

打赏

支付宝赞助

打赏

  移步手机端
django & celery - 关于并发处置惩罚才能和内存运用的小结

1、打开你手机的二维码扫描APP
2、扫描左则的二维码
3、点击扫描获得的网址
4、可以在手机端阅读此文章
未定义标签

本文来源:搜奇网

本文地址:https://www.sou7.cn/282393.html

关注我们:微信搜索“搜奇网”添加我为好友

版权声明: 本文仅代表作者个人观点,与本站无关。其原创性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。请记住本站网址https://www.sou7.cn/搜奇网。

发表评论

选填

必填

必填

选填

请拖动滑块解锁
>>