芹菜 max_memory_per_child 是否在链或弦内工作?

Does celery max_memory_per_child work within chains or chords?

我的应用程序存在内存泄漏问题,我无法修复,因此我已通过在我的 Django 应用程序设置中使用 CELERY_WORKER_MAX_MEMORY_PER_CHILD 解决了该问题。它似乎在重置达到内存限制的工作人员,但这些工作人员是链中的一个组的一部分,如下所示:

chain(setup | group(job1, job2) | call_back)()

当工作人员在处理 group 中的一项作业时达到内存限制后,call_back 似乎永远不会被调用,因为 celery.chord_unlock 无限循环。 CELERY_WORKER_MAX_MEMORY_PER_CHILD 是否只适用于个别任务? (不在链条或和弦内?)

每个子配置设置的最大内存最有可能起作用。

我怀疑这里有两种可能性之一:

  1. 作为 Chord 的一部分执行的一个或多个任务达到最大重试次数。
  2. Chord 存在问题(错误),导致无法调用回调。

运行 你的工人有 DEBUG 或 INFO 日志级别,看看发生了什么。