Как успешно запустить цепочку аккордов в сельдерее? - PullRequest
0 голосов
/ 05 июня 2018

Я успешно использую аккорд в своей системе.Но теперь у меня есть случай, когда я должен последовательно запускать номера аккордов (второй начинается, когда первый заканчивается).Итак, я пытался использовать цепочку аккордов.Но это не работает для меня.

@app.task(bind=True)
def some_celery_beat_worker(self):
    feed_chain = []
    for feed in feed_list:
        celery_task_list = [perform single_task.si(url)
                                for url in some_url_list]
        per_feed_chord = chord(celery_task_list, chord_callback.si(feed['_id'], feed['xml_file_name']))
        feed_chain.append(per_feed_chord)
    chain(*feed_chain).delay()

Получение в качестве трассировки:

Traceback (most recent call last):
  File "python3.4/site-packages/celery/app/trace.py", line 374, in trace_task
    R = retval = fun(*args, **kwargs)
  File "python3.4/site-packages/celery/app/trace.py", line 629, in __protected_call__
    return self.run(*args, **kwargs)
  File "workers.py", line 156, in joblist_updater_worker
    chain(*feed_chain).delay()
  File "python3.4/site-packages/celery/canvas.py", line 182, in delay
    return self.apply_async(partial_args, partial_kwargs)
  File "/python3.4/site-packages/celery/canvas.py", line 566, in apply_async
    dict(self.options, **options) if options else self.options))
  File "python3.4/site-packages/celery/canvas.py", line 596, in run
    first_task.apply_async(**options)
  File "python3.4/site-packages/celery/canvas.py", line 1241, in apply_async
    return (self.tasks[0] | body).set(task_id=task_id).apply_async(
KeyError: 0

Мне нужно исправить этот конкретный рабочий процесс или любой альтернативный рабочий процесс, который может решить эту конкретную проблему (количество аккордов, равное единице)за другим)

1 Ответ

0 голосов
/ 05 июня 2018

Проблема была в том, как я сформировал chain.Это не было правильно (по крайней мере, для моей версии сельдерея), хотя предложено в ряде мест.

Подход, который работает для меня.

feed_chain = chain()
for feed in feed_list:
    feed_chain |= chord(args)

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