3

我有以下项目: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。显然,我需要以某种方式保护那部分代码,但我不知道如何。如何确保某些代码仅在工作人员中运行?

4

1 回答 1

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
于 2013-04-23T07:38:25.127 回答