我的Python代码有问题吗? (功能)

时间:2010-12-29 07:52:25

标签: python django queue rabbitmq celery

#tasks.py
from celery.decorators import task

@task()
def add(x, y):
    add.delay(1, 9)
    return x + y

>>> import tasks
>>> res = tasks.add.delay(5, 2)
>>> res.result()
7

如果我运行此代码,我希望将任务连续添加到队列中。但事实并非如此!只有第一个任务(5,2)被添加到队列并进行处理。

由于这一行,应该不断添加任务:“add.delay(1,9)”

注意:我需要执行另一项任务。

3 个答案:

答案 0 :(得分:0)

据我所知,periodic_task装饰器正在创建前期任务,任务只创建一个任务。延迟只是异步执行它。

你应该只使用periodic_task而不是递归。

答案 1 :(得分:0)

函数体内的

add是指原始函数,而不是它的装饰版本。

如果您只需要反复运行任务,请改用@periodic_task。如果每次延迟不同,您只需要递归。在这种情况下,子类Task而不是使用装饰器,你将能够毫无问题地使用递归。

答案 2 :(得分:0)

您应该查看子任务和回调,可能会给您正在寻找的答案

http://celeryproject.org/docs/userguide/tasksets.html