J'ai n (typiquement n < 10 mais il devrait s'agrandir) des processus s'exécutant sur des machines différentes et communiquant via amqp en utilisant RabbitMQ. Les processus sont généralement longs et peuvent être implémentés dans n'importe quelle langue (bien que la plupart soient java/python).Calcul de flux de données en python
Chaque processus nécessite un nombre d'entrées (nombres/chaînes) et produit un certain nombre de sorties (également des nombres ou des chaînes). L'exécution d'un processus s'effectue de manière asynchrone: envoi d'un message dans sa file d'attente d'entrée et attente du déclenchement d'un rappel par la file d'attente de sortie.
Idéalement, l'utilisateur spécifie des entrées et des sorties désirées et le système devrait:
- détecter les processus nécessaires et générer le graphe de dépendance
- tri topologiquement le graphique et l'exécuter, les transitions de noeuds devront être déclenché par un événement
Un nœud devrait se déclencher si son entrée est prête, permettant le parallélisme par branche. Je ne peux supposer aucun cycle pour l'instant, mais il y aura finalement des cycles (par exemple, deux processus peuvent devoir itérer jusqu'à ce que la sortie ne change plus).
Cela devrait être un problème connu de programmation de flux de données (discussed here before) et je veux éviter de réinventer la roue. Je préférerais une solution python et une recherche mène à Trellis et Pypes. Le treillis n'est plus développé mais semble soutenir les cycles, contrairement aux pypes. Vous ne savez pas non plus comment les pypes sont activement développés. Autres recherches reveal a whole list of event based programming frameworks, dont je connais particulièrement bien. Il y a bien sûr des environnements de workflow comme Taverna et KNIME, mais cela semble exagéré.
Quelqu'un a-t-il une expérience de ce type de problème ou des bibliothèques mentionnées?
Modifier: Autres bibliothèques je trouve sont:
Qu'est-ce que vous avez sélectionné à la fin? – elviejo79
J'ai fini par rouler ma propre couche mince sur le dessus de Rabbitmq – dgorissen
ouais ... peut-être dans un proche avenir Dataflow/beam sera une bonne solution pour python. http://stackoverflow.com/questions/35264441/what-is-apache-beam – elviejo79