高效的Python IPC

Woj*_*ilo 6 python rpc ipc communication

我做在Python3的应用,这将在划分batchgui零件. Batch负责处理逻辑并gui负责显示它.

我应该使用哪个进程间通信(IPC)框架满足以下要求:

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

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

编辑: 我发现了很多IPC库,比如:高效Python到Python IPCActiveMQ或RabbitMQ或ZeroMQ或.

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

  • 的RabbitMQ
  • zeromq

它们是否适合这个问题?如果不是为什么?如果事情好转,请告诉我为什么.

Jon*_*han 10

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

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

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


Bra*_*rad 7

我已经使用了Redis引擎.非常 简单,轻巧.

服务器端做:

import redis
r = redis.Redis() # Init
r.subscribe(['mychannel']) # Subscribe to "channel"
for x in r.listen():
  print "I got message",x
Run Code Online (Sandbox Code Playgroud)

客户端做:

import redis
r = redis.Redis() # Init
r.publish('mychannel',mymessage)
Run Code Online (Sandbox Code Playgroud)

"messages"是字符串(任何大小).如果你需要传递复杂的数据结构,我喜欢使用json.loads和json.dumps来转换python dicts/arrays和字符串 - "pickle"可能是更好的方法来进行python-to-python通信,尽管JSON意味着"另一面"可以写成任何东西.

现在Redis还有十亿件其他的东西 - 而且它们本身就是一样的简单.