我正在Python3中创建一个应用程序,它将分为batch
和gui
部分。 Batch
负责处理逻辑,gui
负责显示它。
我应该使用哪个inter-process communication (IPC)框架满足以下要求:
附加:如果GUI保证也用Python编写,那么选择是否会成为其他选择?
编辑:我发现了很多IPC库,比如:Efficient Python to Python IPC或ActiveMQ or RabbitMQ or ZeroMQ or。
到目前为止,我发现的最佳选择是:
它们是否适合解决此问题?如果不是为什么?如果事情好转,请告诉我为什么。
你提到的三个看起来很合适,并且会满足你的要求。我认为你应该继续你最熟悉的东西\熟悉。
根据我的个人经验,我确实认为ZeroMQ是效率,易用性和互操作性之间的最佳组合。我很容易将zmq 2.2与Python 2.7集成,因此这将是我个人的最爱。但是正如我所说,我非常肯定你不能错过所有3个框架。
一半相关:需求往往随着时间而变化,您可能决定稍后切换框架,因此封装对框架的依赖将是一个很好的设计模式。 (例如,有一个与框架交互的管道模块,并且其API使用您的内部数据结构和域语言)
我已经使用了Redis引擎。非常简单,轻巧。
服务器端做:
import redis
r = redis.Redis() # Init
r.subscribe(['mychannel']) # Subscribe to "channel"
for x in r.listen():
print "I got message",x
客户端做:
import redis
r = redis.Redis() # Init
r.publish('mychannel',mymessage)
“messages”是字符串(任何大小)。如果你需要传递复杂的数据结构,我喜欢使用json.loads和json.dumps来转换python dicts / arrays和字符串 - “pickle”可能是更好的方法来进行python-to-python通信,尽管JSON意味着“另一面”可以写成任何东西。
现在Redis还有十亿件其他的东西 - 而且它们本身就是一样的简单。
你在框架中要求很多东西;网络启用,多平台,多语言,高性能(理想情况下应进一步指定 - 它是什么意思,带宽?延迟?什么是“足够好”;我们是在谈论kB / s,MB / s,GB / s?1 ms或1000 ms往返?)另外还有很多未提及的事情很容易发挥作用,例如你需要身份验证还是加密?有些框架为您提供了这样的功能,其他框架则依靠自己实现该部分难题。
可能没有银弹产品可以为您提供理想的解决方案,同时优化所有这些要求。至于你的问题的“附加”组件 - 是的,如果你只将语言要求限制为python,或者进一步区分密钥要求和可用要求,那么可以有更多的解决方案。
您可能想要了解的一项技术是Versile Python(完全披露:我是开发人员之一)。它是多平台的,支持python v2.6 + / v3和java SE6 +。关于性能,取决于您的要求。如果您对该技术有任何疑问,请询问forum。
解决方案是dbus
它是一个成熟的解决方案,可用于许多语言(C,Python,...,只是谷歌dbus +你最喜欢的语言),虽然不如共享内存快,但仍然足够快,几乎所有不需要的东西(硬)实时属性。
我会在这里采取不同的方法并说明为什么不使用互联网的事实上的RPC语言?即HTTP REST API?
使用客户端的Python请求和服务器端的Flask,您将获得以下好处: