python - golang <--> python 通信的最简单的 pub-sub 通信,可能跨机器?

标签 python python-2.7 go publish-subscribe

我正在开发一个用 Golang 编写的 Web 应用程序,它需要调用 Python 程序/模块来完成一些繁重的工作。由于那是非常内存/CPU 密集型的,它可能在单独的机器上。由于 Golang 和 Python 不能直接对话,有 3 种方法可以实现这一点:

  1. 只需将 python 程序作为操作系统进程从 Go 执行(如果在同一台机器上)(或 RPC?)
  2. 将 Python 进程包装在一个服务中并公开它以便从 Go 调用它(可能是一个简单的 CRUD 类服务 - A Bottle/flask restful 服务)
  3. 有一个简单的发布-订阅系统来实现此目的(Redis 或某些 MQ 系统)- 添加基于 Redis 的缓存正在考虑中,因此可能是采用这种方式的一个很好的理由。不确定。

最主要的是,需要很长时间才能完成的 python 进程必须“通知”Web 应用程序它已经完成。数据可以在文件/数据库中,也可以由进程“返回”。

在类似发布/订阅的环境中实现这一目标的最简单方法是什么?

更新 REST 似乎是一种方式,但会产生实现服务器端推送的成本,这可能会或可能不会通过现有的微型 Web 框架轻松实现。尽管如此,发布/订阅会为可维护性和学习曲线增加一层额外的复杂性。我不确定是否可以跨机器实现类似 RPC 的调用。在这方面什么是好的选择?

最佳答案

使用 ZeroMQ

Python 有很好的 pyzmq

GO bindngs也存在。

ZeroMQ 代码通常简短而有效。

您甚至可以在 Unix 上使用本地套接字。

除了 pub/sub 之外,还有其他消息传递模式,您可以使用 req/resp 或 push/pull。

不太了解您的应用程序,我可以提供集成示例 lock manager using zeromq in Python

使用 ZeroRPC

experimental Golang lib能够通过 ZeroMQ 与 Python 和 Node.js 代码通信,如图所示(对于 Python 和 Node.js)zerorpc.dotclould.com

用 Python 编写可通过 ZeroRPC 调用的函数非常简单 - 事实上,您不必使用 zeromq 编写一行(有命令行工具,它允许将函数与适当形状的签名集成)。

关于python - golang <--> python 通信的最简单的 pub-sub 通信,可能跨机器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24791113/

相关文章:

python pip - 从本地目录安装

go - 来自 Goroutine channel 的随机结果,该 channel 接收指向底层对象的指针

python - pytest 使用变量自省(introspection)断言消息自定义

python - 如果在层次结构中混合使用新旧样式类,会发生什么情况?

python - 捕获的异常是无

unit-testing - 为什么 go-cmp Equal() 说结构体不深度相等,即使所有字段都深度相等?

go - 当对同一个变量调用两次 defer 时会发生什么?

Python ast 包 : traversing object hierarchies

python - 当 grep 找不到匹配项时,使用 grep 命令的 subprocess.check_output 失败

python - 需要帮助修复我的 RK4 实现