高效的Python IPC

问题描述 投票:6回答:5

我正在Python3中创建一个应用程序,它将分为batchgui部分。 Batch负责处理逻辑,gui负责显示它。

我应该使用哪个inter-process communication (IPC)框架满足以下要求:

  1. GUI可以在除批处理之外的其他设备上运行(GUI可以在同一设备上运行,在智能手机,平板电脑等,本地或通过网络运行)。
  2. 批处理(Python3 IPc库)应该在Linux,Mac,Windows上没有问题......
  3. IPC应该支持用不同语言编写的GUI(Python,Javascript,...)
  4. IPC的性能很重要 - 它应该尽可能“互动”,但不要丢失信息。
  5. 几个GUI可以连接到同一批次。

附加:如果GUI保证也用Python编写,那么选择是否会成为其他选择?

编辑:我发现了很多IPC库,比如:Efficient Python to Python IPCActiveMQ or RabbitMQ or ZeroMQ or

到目前为止,我发现的最佳选择是:

  • 的RabbitMQ
  • 西风

它们是否适合解决此问题?如果不是为什么?如果事情好转,请告诉我为什么。

python ipc communication rpc
5个回答
8
投票

你提到的三个看起来很合适,并且会满足你的要求。我认为你应该继续你最熟悉的东西\熟悉。

根据我的个人经验,我确实认为ZeroMQ是效率,易用性和互操作性之间的最佳组合。我很容易将zmq 2.2与Python 2.7集成,因此这将是我个人的最爱。但是正如我所说,我非常肯定你不能错过所有3个框架。

一半相关:需求往往随着时间而变化,您可能决定稍后切换框架,因此封装对框架的依赖将是一个很好的设计模式。 (例如,有一个与框架交互的管道模块,并且其API使用您的内部数据结构和域语言)


5
投票

我已经使用了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还有十亿件其他的东西 - 而且它们本身就是一样的简单。


2
投票

你在框架中要求很多东西;网络启用,多平台,多语言,高性能(理想情况下应进一步指定 - 它是什么意思,带宽?延迟?什么是“足够好”;我们是在谈论kB / s,MB / s,GB / s?1 ms或1000 ms往返?)另外还有很多未提及的事情很容易发挥作用,例如你需要身份验证还是加密?有些框架为您提供了这样的功能,其他框架则依靠自己实现该部分难题。

可能没有银弹产品可以为您提供理想的解决方案,同时优化所有这些要求。至于你的问题的“附加”组件 - 是的,如果你只将语言要求限制为python,或者进一步区分密钥要求和可用要求,那么可以有更多的解决方案。

您可能想要了解的一项技术是Versile Python(完全披露:我是开发人员之一)。它是多平台的,支持python v2.6 + / v3和java SE6 +。关于性能,取决于您的要求。如果您对该技术有任何疑问,请询问forum


1
投票

解决方案是dbus

它是一个成熟的解决方案,可用于许多语言(C,Python,...,只是谷歌dbus +你最喜欢的语言),虽然不如共享内存快,但仍然足够快,几乎所有不需要的东西(硬)实时属性。


0
投票

我会在这里采取不同的方法并说明为什么不使用互联网的事实上的RPC语言?即HTTP REST API?

使用客户端的Python请求和服务器端的Flask,您将获得以下好处:

  • 像Postman这样的现有HTTP REST工具可以访问和测试您的服务器。
  • 这些工具可以记录您的API。
  • 如果你也使用JSON,那么你也可以使用很多工具。
  • 您可以获得成熟的安全实践和解决方案(基于会话的安全性和SSL)。
  • 这是许多不同开发人员熟悉的模式。
© www.soinside.com 2019 - 2024. All rights reserved.