golang最简单的酒吧酒吧酒吧<--&燃气轮机;python通信,可能是跨机器的?
我正在开发一个用Golang编写的web应用程序,它需要调用Python程序/模块来完成一些繁重的工作。因为这是非常内存/CPU密集型的,所以它可能位于单独的机器上。由于Golang和Python不能直接对话,因此有3种方法可以实现这一点:golang最简单的酒吧酒吧酒吧<--&燃气轮机;python通信,可能是跨机器的?,python,python-2.7,go,publish-subscribe,Python,Python 2.7,Go,Publish Subscribe,我正在开发一个用Golang编写的web应用程序,它需要调用Python程序/模块来完成一些繁重的工作。因为这是非常内存/CPU密集型的,所以它可能位于单独的机器上。由于Golang和Python不能直接对话,因此有3种方法可以实现这一点: 只需从Go(如果在同一台机器上)(或RPC?)将python程序作为操作系统进程执行即可 将Python进程包装到服务中,并将其公开,以便从Go调用(可能是一个简单的CRUD类服务—瓶/瓶restful服务) 有一个简单的发布子系统来实现这一点(Redis或
pyzmq
也存在
ZeroMQ代码通常简短有效
您甚至可以在Unix上使用本地套接字
除了pub/sub之外,还有其他消息传递模式,您可以使用req/resp或push/pull
由于不太了解您的应用程序,我可以提供集成的示例
使用ZeroRPC
可以通过ZeroMQ与Python和Node.js代码通信,如图所示(对于Python和Node.js)
用Python编写可通过ZeroRPC调用的函数非常简单-事实上,您不必使用zeromq(有命令行工具,它允许将函数与正确形状的签名集成在一起)编写一行。对于您的特定模式,只需从Go生成进程并读取stdout是最有效的,没有必要在头上加一个
这在很大程度上取决于python脚本的功能,如果它是一个特定的任务,那么只需生成流程并检查退出代码就足够了,如果您必须始终将脚本保留在后台并与之通信,那么Redis或ZeroMQ是不错的,在Go和python上都非常成熟
如果它位于不同的服务器上,那么ZeroMQ/RPC或python中的普通http服务器就可以了,开销应该最小 它并没有写任何东西给stdout,我们也不需要它。我明白你的意思,倾向于依靠这个。但将来有可能将Redis添加到应用程序中,我想知道我是否应该这样做。这在很大程度上取决于python脚本的功能,如果是一项特定任务,那么只需生成流程并检查退出代码就足够了,如果您必须始终将脚本保存在后台并与之通信,那么Redis或ZeroMQ很好,在Go和Python上都非常成熟。这是一项巨大的内存密集型任务,将在单独的机器上运行,以防止golang服务器的速度减慢。因此,生成一个单独的进程可能不是最好的主意ZeroMQ/RPC和/或python中的纯http服务器应该可以,开销应该是最小的。能否请您在回答中添加您的最后一条评论,以便我可以继续接受它?从可维护性和经济角度来看,它值得开销吗?这是一个非常小的用例。@PhD使用ZeroMQ的代价是什么?从技术上讲,它非常快,不消耗太多内存,而且您将很难找到技术上更有效的方法。如果问题是酒吧/酒吧,你有更好的报价吗?Redis更大,必须安装。Db需要一个文件。@PhD刚刚添加了指向另一个答案的链接,显示了使用zeromq的集成。只需计算通信所需的线路。除了为Python安装pyzmq库和为Go安装类似的库之外,没有更多的设置和维护了。@PhD添加了ZeroRPC解决方案。我无法评估Golang部分的实验性,但我已经尝试了Python部分,它非常棒-只要重复(ZeroRPC自述)中的示例,您就会理解我的意思。