如何分析芹菜任务的内存使用情况?

Aki*_*gai 7 python memory-management celery django-celery

我有一个使用 celery lib 运行后台任务的 django 应用程序,我需要获取并存储任务的最大内存使用量。

我已经尝试过 memory_profiler 库中的 memory_usage,但我不能在任务中使用这个函数,因为我收到错误:“守护进程不允许有子进程”。我还尝试了任务外的 memory_usage 函数来监视 task.async 调用,但由于某种原因,该任务被触发了两次。

我发现的所有其他方法包括检查代码不同位置的内存使用情况,然后获取最大值,但我觉得它非常不准确,并且可能有些调用的内存使用率很高在我设法检查当前内存使用情况之前,由于垃圾收集而被遗漏了。

官方文档有一些有用的功能,但它必须依赖于上述方法。https://docs.celeryproject.org/en/latest/reference/celery.utils.debug.html

提前致谢!

Gla*_*uco 0

为什么不是controller任务?

Celery 基础设施可以查询所有工作人员的当前状态:

from celery import Celery
app = Celery(...)
app.control.inspect().active()
Run Code Online (Sandbox Code Playgroud)

这可以在任务中使用,每 # 秒轮询一次集群并了解发生了什么。我使用了类似的方法来识别kill()任务之间的命令并发送命令。我的任务是可杀死的,因此每个任务都知道如何处理软杀死。