python中的数据流计算

dgo*_*sen 15 python workflow scheduling event-based-programming amqp

我有n(通常n <10但应该扩展)进程在不同的机器上运行并使用RabbitMQ通过amqp进行通信.进程通常是长时间运行的,可以用任何语言实现(尽管大多数是java/python).

每个过程都需要许多输入(数字/字符串)并产生许多输出(也只是数字或字符串).执行进程是异步发生的:在其输入队列上发送消息并等待输出队列触发回调.

理想情况下,用户指定一些输入和所需的输出,系统应该:

  • 检测需要哪些进程并生成依赖图
  • 在拓扑上对图形进行排序并执行它,节点转换需要是事件驱动的

如果节点的输入就绪,节点应该触发,允许每个分支并行.我现在可以假设没有循环,但最终会有循环(例如,两个进程可能需要迭代直到输出不再变化).

这应该是(数据)流程编程(之前讨论过)的已知问题,我想避免重新发明轮子.我更喜欢python解决方案,搜索引导TrellisPypes.Trellis不再开发,但似乎支持周期,而pypes则不支持.也不确定pypes是如何积极开发的.

进一步的搜索揭示了基于事件的编程框架的完整列表,其中没有一个我特别了解.当然有像TavernaKNIME这样的工作流程环境,但这似乎有些过分.

有没有人有解决这类问题或提到的图书馆的经验?

编辑:我发现的其他库是:

Dav*_*sky 5

python.org有一个关于"基于流程的编程"的维基页面 - http://wiki.python.org/moin/FlowBasedProgramming


Mic*_*lon 1

最重要的是,如果您可以用少量代码(几百行)重新发明轮子,并且您完全理解并可以记录这些代码,那么就这样做。

考虑到一些基本的基础工具,在这个领域中使用的抽象并不难实现。RabbitMQ就是这样一个工具。Node.js 是另一个。有很多库实现了管理数据流、工作流、有限状态机等的有用方法,但它们有很多重叠,而且往往不完整。也许最初的开发人员只是构建了足够的东西来解决他最初的问题,并且由于这种类型的编程并不那么流行,因此没有足够的数量来继续开发。

按受欢迎程度对所有可能的解决方案进行排名、选择最受欢迎的解决方案并努力使其发挥作用(当然,同时分享您的工作),有很多话要说。