我有以下项目:https://github.com/gonvaled/celery-test
我想拥有一些仅在工人中执行的代码,但我不知道该怎么做。
这是运行的工人:
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
。显然,我需要以某种方式保护该代码的那部分,但我不知道如何。如何确保仅在工人中运行某些代码?
我的解决方案基于一个全局变量,在模块gd.py
(全局数据)中,我在导入客户端时进行了实例导入。
这是我的客户端代码:
import gd
gd.CLIENT_ACTIVE = True
# import worker here
....
在我的工人中,我确实:
import gd
if not getattr(gd, 'CLIENT_ACTIVE', None)
# worker specific code here