Я работаю над (по крайней мере, я так думаю) простой системой разветвления с использованием python (2.x) и сельдерея. Основная идея состоит в том, чтобы запустить некоторые варианты алгоритма для каждого из группы входных документов, а затем сделать то же самое для выходных данных с другим алгоритмом (и так далее несколько раз). Так более или менее:

       doc1
        /|\
doc1_1 doc1_2 doc1_3
  /|\  /|\      /|\
doc1_1_2 ....

Кроме того, было бы полезно иметь возможность синхронизировать в определенной точке этой цепочки выполнения. Это не критично, но уменьшит общее время выполнения.

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

Я здесь в растерянности, потому что не знаком с парадигмами дизайна сельдерея, и скудная документация мне не поможет. каков «правильный» (или, по крайней мере, уродливый) способ реализовать нечто подобное?

2
user2952698 21 Авг 2014 в 17:08

1 ответ

Лучший ответ

Я получаю результат: я хочу построить множество цепочек, а затем собрать их все в группу и выполнить ее. Мой код выглядит примерно так:

res = []
for sequence in product(*input, *action):
    method = getattr(tasks, sequence[1]['method'])
    ch = chain(method.s(input_document, **(sequence[1])))
    for seq in sequence[2:]:
        method = getattr(tasks, seq['method'])
        ch |= method.s(**seq)
    res.append(ch)
r = group(res).apply_async()
r.save()
return r.id

Таким образом, в основном вычисляется скалярное произведение всех входных документов и действий (алгоритмическая настройка), извлекается соответствующий метод из модуля задач, объединяется их все вместе, объединяется в группу и выполняется.

Кроме того, доступ к результатам цепочки из GroupResult, кажется, работает, если вы не забыли сохранить / восстановить GroupResult.

0
user2952698 18 Сен 2014 в 17:03