Я работаю над (по крайней мере, я так думаю) простой системой разветвления с использованием python (2.x) и сельдерея. Основная идея состоит в том, чтобы запустить некоторые варианты алгоритма для каждого из группы входных документов, а затем сделать то же самое для выходных данных с другим алгоритмом (и так далее несколько раз). Так более или менее:
doc1
/|\
doc1_1 doc1_2 doc1_3
/|\ /|\ /|\
doc1_1_2 ....
Кроме того, было бы полезно иметь возможность синхронизировать в определенной точке этой цепочки выполнения. Это не критично, но уменьшит общее время выполнения.
Я пробовал создавать и выполнять группы в задаче, но я не могу узнать, не удалось ли выполнить эти подзадачи или даже завершить их. Создание большого количества цепочек кажется несколько нелегким (здесь программист на C, поэтому я не претендую на авторитет), но, по крайней мере, я смогу получить текущий статус каждой задачи в цепочке. Если я правильно понимаю довольно расплывчатую документацию, я смогу синхронизировать, используя аккорд, содержащий все цепочки, но, похоже, нет способа получить статус каждой цепочки.
Я здесь в растерянности, потому что не знаком с парадигмами дизайна сельдерея, и скудная документация мне не поможет. каков «правильный» (или, по крайней мере, уродливый) способ реализовать нечто подобное?
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.
Похожие вопросы
Новые вопросы
python
Python — это мультипарадигмальный многоцелевой язык программирования с динамической типизацией. Он предназначен для быстрого изучения, понимания и использования, а также обеспечивает чистый и унифицированный синтаксис. Обратите внимание, что Python 2 официально не поддерживается с 01.01.2020. Если у вас есть вопросы о версии Python, добавьте тег [python-2.7] или [python-3.x]. При использовании варианта Python (например, Jython, PyPy) или библиотеки (например, Pandas, NumPy) укажите это в тегах.