使用 maxtasksperchild 和 even

2024-06-15 18:39:45 发布

您现在位置:Python中文网/ 问答频道 /正文

我们有一个python应用程序和一些芹菜工人。在

我们使用下一个命令启动芹菜工人:

python celery -A proj worker --queue=myqueue -P prefork --maxtasksperchild=500

我们和芹菜工人有两个问题。在

  1. 我们内存泄漏了
  2. 我们的工作量很大,我们需要很多工人来快速处理所有的事情

我们仍在调查内存泄漏,但由于它是遗留代码,因此很难找到原因,解决此问题需要一些时间。为了防止泄漏,我们使用--maxtasksperchild,因此每个工作进程在处理500个事件后都会重新启动自己。它工作正常,记忆增长到一定程度。在

第二个问题有点难。为了处理芹菜队列中的所有事件,我们必须启动更多的工人。但是使用prefork时,每个进程占用大量内存(在我们的例子中大约为110M),因此我们要么需要大量服务器来启动正确数量的工作线程,要么我们必须从prefork切换到{}:

^{pr2}$

在本例中,我们将使用相同数量的内存(每个进程大约110M),但每个进程将有10个工作线程,这将大大提高内存效率。但问题是我们仍然有问题1(内存泄漏),我们不能使用--maxtasksperchild,因为它不能与{}一起工作。在

有什么想法可以用--maxtasksperchild和{}一起使用吗?在


Tags: 内存命令应用程序数量queue进程事件线程
1条回答
网友
1楼 · 发布于 2024-06-15 18:39:45
  • 升级Celery,我刚刚快速扫描了主代码,他们承诺max-memory-per-child。希望它能与所有并发模型一起工作。我还没试过。在
  • 设置进程监控,向内存阈值以上的工作人员发送优雅的终止信号。对我有用。在
  • 对照组在记忆有限的情况下运行芹菜。对我有用。在

相关问题 更多 >