Я вызываю задачу в задачах в Django-Celery
Вот мои задачи.
@shared_task
def post_notification(data,url):
url = "http://posttestserver.com/data/?dir=praful" # when in production, remove this line.
headers = {'content-type': 'application/json'}
requests.post(url, data=json.dumps(data), headers=headers)
@shared_task
def shipment_server(data,notification_type):
notification_obj = Notification.objects.get(name = notification_type)
server_list = ServerNotificationMapping.objects.filter(notification_name=notification_obj)
for server in server_list:
task = post_notification.delay(data,server.server_id.url)
print task.status # it prints 'Nonetype' has no attribute id
Как я могу вызвать задачу внутри задачи? Я где-то читал, что это можно сделать с помощью group
, но я не могу сформировать правильный синтаксис. Как это сделать?
Я пробовал это
for server in server_list:
task = group(post_notification.s(data, server.server_id.url))().get()
print task.status
Выдает предупреждение
TxIsolationWarning: Polling results w│
ith transaction isolation level repeatable-read within the same transacti│
on may give outdated results. Be sure to commit the transaction for each │
poll iteration. │
'Polling results with transaction isolation level '
Не знаю что это!!!
Как решить мою проблему?
result = task.delay
/task.apply_async
дает объектAsyncResult
. Это поддерживает атрибут опроса.status
, который при каждом доступе будет проверять состояние задачи. Нет смысла вызывать .state сразу после того, как вы отправили задачу, потому что, скорее всего, worker еще не начал ее выполнять. В вашем более позднем примере вы вызываетеtask = .....get().status
, который не будет работать, потому что вы вызываете статус для возвращаемого значения задачи, а не для результата (result.status vs result.get().status). - person asksol   schedule 18.02.2014(post_notification.s() | do_sometihing_after_posted.s()).delay()
. См. docs.celeryproject.org/en/latest. /userguide/ и docs.celeryproject.org/en/latest/ руководство пользователя/canvas.html - person asksol   schedule 18.02.2014