我正在将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
当功能名称重叠时,如何处理芹菜只能通过“延迟方法”执行 。
提前致谢。
答案 0 :(得分:0)
由于显而易见的原因,您不能在任何Python代码中指向两个相同的名称。您可以通过导入模块而不是函数来更轻松地区分它们:
from utils import redis
from utils import tasks
def get_something():
redis.do_stuff.delay()
tasks.do_stuff()
但是请注意,可以直接调用Celery任务而不使用delay()
,这会导致它们在进程中而不是通过Celery立即执行。