Я звоню задачу в пределах задач в Django-сельдерееPython Сельдерей - Как назвать задачи сельдерея внутри другой задачи
Вот мои задачи.
@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 '
не знаю, что это !!!
Как решить мою проблему?
= task.delay' /' task.apply_async' дает 'объект AsyncResult'. Это поддерживает атрибут опроса '.status', который каждый раз, когда его доступ будет проверять состояние задачи. Нет смысла вызывать .state сразу после того, как вы отправили задачу, потому что шансы на то, что рабочий еще не начал ее выполнять. В следующем примере вы вызываете 'task = ..... get(). Status', который не будет работать, потому что вы вызываете статус возвращаемого значения задачи, а не результат (result.status vs result.get() .положение дел). – asksol
Наконец, вы не должны ждать результата подзадачи, потому что это может привести к взаимоблокировкам, вместо этого вы должны использовать задачу обратного вызова: '(post_notification.s() | do_sometihing_after_posted.s()). Delay()'. См. Http://docs.celeryproject.org/en/latest/userguide/tasks.html#avoid-launching-synchronous-subtasks и http://docs.celeryproject.org/en/latest/userguide/canvas.html – asksol