我正在开发一个用Golang编写的Web应用程序,需要调用Python程序/模块来完成一些繁重的工作。由于这是非常大的内存/ CPU,它可能在一台单独的机器上。由于Golang和Python无法直接对话,因此有三种方法可以实现:
主要的是,需要很长时间才能完成的python进程必须“通知”Web应用程序已完成。数据可以在文件/ DB中,也可以由进程“返回”。
在pub / sub类环境中实现此目的的最简单方法是什么?
更新 REST似乎是一种方式,但会产生实现服务器端推送的成本,这可能会或可能不容易与现有的微Web框架一起使用。 pub / sub将为可维护性和学习曲线添加额外的复杂性层。我不确定是否可以跨机器实现类似RPC的调用。在这方面什么是好的选择?
答案 0 :(得分:3)
Python有很好的pyzmq
GO bindngs也存在。
ZeroMQ代码通常简短而有效。
你甚至可以在Unix上使用本地套接字。
除了pub / sub之外,甚至还有其他消息传递模式,您可以使用req / resp或push / pull。
我不太了解您的申请,我可以提供整合lock manager using zeromq in Python
的样本有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服务器应该没问题,开销应该是最小的。