如何检测我是否正在芹菜工人中跑步?

Cla*_*diu 6 python celery

有没有办法以编程方式确定当前模块的导入/运行是在芹菜工人的背景下完成的?

我们已经确定要在运行Celery worker之前设置环境变量,并在代码中检查该环境变量,但是我想知道是否有更好的方法?

小智 5

简单,

import sys

IN_CELERY_WORKER_PROCESS = sys.argv and sys.argv[0].endswith('celery')\
    and 'worker' in sys.argv

if IN_CELERY_WORKER_PROCESS:
    print ('Im in Celery worker')
Run Code Online (Sandbox Code Playgroud)

http://percentl.com/blog/django-how-can-i-detect-whether-im-running-celery-worker/


Nip*_*dar 1

添加环境变量是检查模块是否由 celery Worker 运行的好方法。在任务提交者进程中,我们可以设置环境变量,以标记它不是在 celery 工作线程的上下文中运行。

但更好的方法可能是使用一些 celery 信号,这可能有助于了解模块是否在工作程序或任务提交程序中运行。例如,worker-process-init信号被发送到每个子任务执行器进程(在预分叉模式下),并且处理程序可用于设置一些全局变量,指示它是一个工作进程。