Что-то не так с моим кодом Python? (функция) - PullRequest
0 голосов
/ 29 декабря 2010
#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 голосов
/ 16 апреля 2011

add внутри тела функции относится к исходной функции, а не к ее оформленной версии.

Если вам просто нужно повторно запустить задачу, используйте @periodic_task.Вам нужна только рекурсия, если задержка отличается каждый раз.В этом случае используйте подкласс Task вместо декоратора, и вы сможете без проблем использовать рекурсию.

0 голосов
/ 16 апреля 2011

Вы должны посмотреть на подзадачи и обратные вызовы, может дать вам ответ, который вы ищете

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

0 голосов
/ 29 декабря 2010

Насколько я понимаю, декоратор period_task создает преиодические задачи, задача создает только одну задачу. А задержка просто выполняет это асинхронно.

Вы должны просто использовать period_task вместо рекурсии.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...