Python中的数据流计算

15 投票
2 回答
5350 浏览
提问于 2025-04-16 14:35

我有 n 个进程(通常 n 小于 10,但应该可以扩展),这些进程在不同的机器上运行,并通过 RabbitMQ 使用 amqp 进行通信。这些进程通常是长时间运行的,可以用任何语言实现(不过大多数是 Java 或 Python)。

每个进程需要一些输入(数字或字符串),并产生一些输出(同样是数字或字符串)。执行一个进程是异步的:也就是说,它会在输入队列上发送一条消息,然后等待输出队列触发回调。

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

  • 检测需要哪些进程,并生成依赖关系图
  • 对图进行拓扑排序并执行,节点之间的转换需要基于事件驱动

当一个节点的输入准备好时,它应该被触发,这样可以实现每个分支的并行处理。我现在可以假设没有循环,但最终会有循环(例如,两个进程可能需要反复迭代,直到输出不再变化)。

这应该是一个在(数据)流编程中已知的问题(之前讨论过TrellisPypes。Trellis 已经不再开发,但似乎支持循环,而 Pypes 不支持。我也不确定 Pypes 的开发活跃程度。

进一步搜索 发现了一整套基于事件的编程框架,不过我对这些都不是特别了解。当然,还有像 TavernaKNIME 这样的工作流环境,但这似乎有些过于复杂。

有没有人有处理这种问题的经验,或者对提到的库有了解?

编辑:我找到的其他库有:

2 个回答

1

简单来说,如果你能用几百行代码重新实现一个轮子,而且你完全理解这些代码并能写好文档,那就去做吧。

在这个领域,使用的抽象概念其实并不难,只要有一些基础工具就可以实现。比如,RabbitMQ就是一个这样的工具,Node.js也是。市面上有很多库可以帮助管理数据流、工作流、有限状态机等等,但它们之间有很多重叠的地方,而且往往不够完整。可能最初的开发者只是解决了他当时遇到的问题,而这种编程方式并不太流行,所以没有足够的人一起开发。

对所有可能的解决方案进行受欢迎程度的排名,选择最受欢迎的那个,然后把精力放在让它好用上(当然,也要分享你的成果),这是一种很好的做法。

5

python.org上有一个关于“基于流程的编程”的维基页面,你可以在这里查看 -- http://wiki.python.org/moin/FlowBasedProgramming

撰写回答