У меня n (обычно n <10, но должно масштабироваться) процессов, работающих на разных машинах и взаимодействующих через amqp с использованием RabbitMQ. Процессы, как правило, долго выполняются и могут быть реализованы на любом языке (хотя большинство из них - Java / Python). </p>
Каждый процесс требует нескольких входов (чисел / строк) и производит несколько выходов (также только чисел или строк). Выполнение процесса происходит асинхронно: отправка сообщения в его входную очередь и ожидание обратного вызова, инициируемого выходной очередью.
В идеале пользователь указывает некоторые входы и желаемые выходы, и система должна:
- определить, какие процессы необходимы, и сгенерировать график зависимости
- топологически сортируйте график и выполняйте его, переходы узлов должны быть управляемыми событиями
Узел должен запускаться, если его вход готов, что допускает параллелизм для каждой ветви. Я могу предположить, что пока нет циклов, но в конечном итоге будут циклы (например, двум процессам может понадобиться повторяться до тех пор, пока выходные данные больше не изменятся).
Это должно быть известной проблемой из (потока данных) программирования ( обсуждалось здесь до ), и я хочу избежать повторного изобретения колеса. Я бы предпочел решение на python, и поиск приводит к Trellis и Pypes . Треллис больше не развивается, но, кажется, поддерживает циклы, а Пайпс - нет. Также не уверен, насколько активно развиваются pypes.
Дальнейшие поиски раскрывают полный список основанных на событиях основ программирования , ни о одной из которых я не особенно разбираюсь. Конечно, существуют рабочие среды, такие как Taverna и KNIME , но это кажется излишним.
У кого-нибудь есть опыт решения проблемы такого типа или с упомянутыми библиотеками?
Редактировать: Другие библиотеки, которые я нашел: