Tengo n (normalmente n < 10 pero debe escalar) procesos que se ejecutan en diferentes máquinas y se comunican a través de amqp usando RabbitMQ. Los procesos suelen ser de larga ejecución y pueden implementarse en cualquier idioma (aunque la mayoría son java/python).Computación de flujo de datos en python
Cada proceso requiere un número de entradas (números/cadenas) y produce varias salidas (también solo números o cadenas). La ejecución de un proceso ocurre de forma asíncrona: envía un mensaje en su cola de entrada y espera que la cola de salida active una devolución de llamada.
Idealmente, el usuario especifica algunas entradas y salidas deseadas y el sistema debería:
- detectar qué procesos se necesitan y generar el gráfico dependencia
- topológicamente ordenar el gráfico y ejecutarlo, transiciones de nodo necesitarán ser controlado por eventos
Un nodo debe activarse si su entrada está lista, lo que permite el paralelismo por rama. Puedo suponer que no hay ciclos por el momento, pero eventualmente habrá ciclos (por ejemplo, dos procesos pueden necesitar iterar hasta que la salida ya no cambie).
Esto debería ser un problema conocido de la programación de flujo (de datos) (discussed here before) y quiero evitar reinventar la rueda. Preferiría una solución de Python y una búsqueda lleva a Trellis y Pypes. Trellis ya no está desarrollado pero parece soportar ciclos, mientras que los pype no. Además, no estoy seguro de qué tan activamente se está desarrollando pypes.
Otras búsquedas reveal a whole list of event based programming frameworks, ninguna de las cuales conozco particularmente. Por supuesto, hay entornos de flujo de trabajo como Taverna y KNIME, pero eso parece excesivo.
¿Alguien tiene alguna experiencia abordando este tipo de problema o con las bibliotecas mencionadas?
Editar: Otras bibliotecas que he encontrado son:
¿Qué selecciona al final? – elviejo79
Acabo de rodar mi propia capa delgada sobre rabbitmq – dgorissen
sí ... tal vez en el futuro cercano Dataflow/beam será una buena solución para python. http://stackoverflow.com/questions/35264441/what-is-apache-beam – elviejo79