我有以下项目:https://github.com/gonvaled/celery-test
我想要一些只在worker中执行的代码,但我不知道该怎么做。
这是工作人员:
pegasus $ celery worker --app=proj
This should only be executed in the worker
-------------- celery@pegasus v3.0.9 (Chiastic Slide)
---- **** -----
--- * *** * -- [Configuration]
-- * - **** --- . broker: amqp://guest@localhost:5672//
- ** ---------- . app: tasks:0x98d188c
- ** ---------- . concurrency: 2 (processes)
- ** ---------- . events: OFF (enable -E to monitor this worker)
- ** ----------
- *** --- * --- [Queues]
-- ******* ---- . celery: exchange:celery(direct) binding:celery
--- ***** -----
[2012-12-22 17:50:31,868: WARNING/MainProcess] celery@pegasus has started.
这是客户端正在运行:
$ python client.py
This should only be executed in the worker
8
客户不应打印This should only be executed in the worker
。显然,我需要以某种方式保护代码的这一部分,但我不知道如何。如何确保某些代码仅在worker中运行?
答案 0 :(得分:0)
我的解决方案基于全局变量,在模块gd.py
(全局数据)中,我在导入客户端时实例化,在导入任何工作者代码之前。
这是我的客户代码:
import gd
gd.CLIENT_ACTIVE = True
# import worker here
....
在我的工作人员中,我这样做:
import gd
if not getattr(gd, 'CLIENT_ACTIVE', None)
# worker specific code here