预取可以提高性能。工人无需等待来自代理的下一条消息即可处理。与代理进行一次通信并处理大量消息可提高性能。与本地内存访问相比,从代理(甚至从本地代理)获取消息的成本很高。还允许工人分批确认消息
将预取设置为零意味着“没有特定限制”,而不是无限
据记载,将预取设置为1等同于将其关闭,但这并非总是如此(请参阅:
只是警告:在对Redis经纪人+ Celery 3.1.15进行测试时,我阅读的有关CELERYD_PREFETCH_MULTIPLIER = 1禁用预取的所有建议显然都是错误的。
为了证明这一点:
- 组
CELERYD_PREFETCH_MULTIPLIER = 1
- 排队5个任务,每个任务将花费几秒钟的时间(例如,time.sleep(5))
开始在Redis中观察任务队列的长度:
watch redis-cli -c llen default
开始
celery worker -c 1
请注意,Redis中的队列长度将立即从5降至
3``CELERYD_PREFETCH_MULTIPLIER = 1
`不会阻止预取,它只是将预取限制为每个队列1个任务。
-Ofair,尽管文档中说什么,也不会阻止预取。
除了修改源代码外,我还没有找到完全禁用预取的任何方法。
- 预取允许分批确认消息。CELERY_ACKS_LATE =当邮件到达工作人员时,True阻止确认邮件
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)