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

时间:2014-07-16 21:30:09

标签: python python-2.7 go publish-subscribe

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

  1. 只需从Go执行python程序作为操作系统进程(如果在同一台机器上)(或RPC?)
  2. 在服务中包装Python进程并公开它以便从Go调用它(可能是一个简单的CRUD,如服务 - A Bottle / flask restful service)
  3. 有一个简单的pub-sub系统来实现这一目标(Redis或某些MQ系统) - 添加基于Redis的缓存是关注的,所以也许这是一个很好的理由。不确定。
  4. 主要的是,需要很长时间才能完成的python进程必须“通知”Web应用程序已完成。数据可以在文件/ DB中,也可以由进程“返回”。

    在pub / sub类环境中实现此目的的最简单方法是什么?

    更新 REST似乎是一种方式,但会产生实现服务器端推送的成本,这可能会或可能不容易与现有的微Web框架一起使用。 pub / sub将为可维护性和学习曲线添加额外的复杂性层。我不确定是否可以跨机器实现类似RPC的调用。在这方面什么是好的选择?

2 个答案:

答案 0 :(得分:3)

使用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编写一行(有命令行工具,它允许使用正确形状的签名集成函数)。

答案 1 :(得分:0)

对于您的特定模式,只需从Go生成过程并阅读标准输出是最有效的,没有必要添加一个标题。

它在很大程度上取决于你的python脚本的作用,如果它是一个特定的任务,那么简单地生成进程并检查退出代码是绰绰有余的,如果你必须将脚本保留在后台时间和沟通,然后Redis或ZeroMQ是好的,并在Go和Python上非常成熟。

如果它在不同的服务器上,那么ZeroMQ / RPC或者只是python中的普通http服务器应该没问题,开销应该是最小的。