用于golang <-> python通信的最简单的pub-sub,可能跨机器吗?
作者:互联网
我正在使用Golang编写的Web应用程序,需要调用Python程序/模块来完成一些繁重的工作.由于那会占用大量内存/ CPU,因此它可能在单独的计算机上.由于Golang和Python无法直接对话,因此有3种方法可以实现此目的:
>只需从Go(如果在同一台机器上)(或RPC?)中将python程序作为OS进程执行即可.
>将Python进程包装在服务中,并公开它以便从Go中调用(可能是像服务这样的简单CRUD-Bottle / flask restful服务)
>拥有一个简单的pub-sub系统来实现这一目标(Redis或某些MQ系统)-越来越多的基于Redis的缓存被加入,因此也许是这样做的一个很好的理由.不确定.
最主要的是,需要很长时间才能完成的python进程必须“通知” Web应用程序已完成.数据可以在文件/数据库中,也可以由过程“返回”.
在类似pub / sub的环境中实现此目标的最简单方法是什么?
更新
REST似乎是一种方法,但会产生实现服务器端推送的成本,而使用现有的微型Web框架可能会或可能不容易实现.然而,发布/订阅将为可维护性和学习曲线增加额外的复杂性.我不确定是否可以在计算机之间实现类似RPC的调用.在这方面,什么是一个好的选择?
解决方法:
使用ZeroMQ
Python有很好的pyzmq
GO bindngs也存在.
ZeroMQ代码通常简短有效.
您甚至可以在Unix上使用本地套接字.
除了pub / sub之外,甚至还有其他消息传递模式,您可以使用req / resp或push / pull.
不太了解您的应用程序,我可以提供集成lock manager using zeromq in Python的示例
使用ZeroRPC
如图所示(对于Python和Node.js),有experimental Golang lib能够通过ZeroMQ与Python和Node.js代码进行通信zerorpc.dotclould.com
在Python中编写可通过ZeroRPC调用的函数非常简单-实际上,您不必使用zeromq编写一行(存在命令行工具,该工具可集成具有适当形状的签名的函数).
标签:go,python-2-7,publish-subscribe,python 来源: https://codeday.me/bug/20191121/2052175.html