执行特定于工作人员的代码

时间:2012-12-22 17:05:11

标签: python celery

我有以下项目: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中运行?

1 个答案:

答案 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