芹菜:防止同时使用同名功能

时间:2014-09-08 08:58:10

标签: django celery django-celery djcelery

我正在将Redis和Celery一起用于django项目。

[预条件]

django==1.5.4
Redis==2.2.4
Celery==3.0.23
django-redis==3.7.1
django-celery==3.0.23

[目录结构]

Project/
     apps/
         app_1/
             views.py
                 def get_something():
         utils/
             redis.py
                 def do_stuff(): // do something related with Redis
             tasks.py
                 @task()
                 def do_stuff(): // execute do_stuff() at redis.py

[问题]

views.py 中,

from utils.redis import do_stuff
from utils.tasks import do_stuff


def get_something():

    do_stuff.delay()  => Execute task by celery (Normal)

    do_stuff()        => Executed do_stuff from tasks.py, not from redis.py
                         Making a recursion error (Unusual)
                         Expected to execute do_stuff from redis.py

功能名称重叠时,如何处理芹菜只能通过“延迟方法”执行

提前致谢。

1 个答案:

答案 0 :(得分:0)

由于显而易见的原因,您不能在任何Python代码中指向两个相同的名称。您可以通过导入模块而不是函数来更轻松地区分它们:

from utils import redis
from utils import tasks


def get_something():
    redis.do_stuff.delay()
    tasks.do_stuff()

但是请注意,可以直接调用Celery任务而不使用delay(),这会导致它们在进程中而不是通过Celery立即执行。