7

batch我正在用 Python3 制作一个应用程序,它将被分成几个gui部分。 Batch负责处理逻辑,gui负责显示。

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

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

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

编辑: 我找到了很多 IPC 库,比如这里:Efficient Python to Python IPC or ActiveMQ or RabbitMQ or ZeroMQ or .

到目前为止,我发现的最好看的选项是:

  • 兔子MQ
  • 零MQ
  • 烟火

他们是解决这个问题的合适方法吗?如果不是为什么?如果有更好的东西,请告诉我为什么。

4

5 回答 5

10

您提到的三个似乎很合适,并且会满足您的要求。我认为你应该继续做你觉得最舒服\最熟悉的事情。

从我个人的经验来看,我相信 ZeroMQ 是效率、易用性和互操作性之间的最佳组合。我很容易将 zmq 2.2 与 Python 2.7 集成在一起,所以这将是我个人的最爱。但是,正如我所说,我很确定所有 3 个框架都不会出错。

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

于 2013-02-02T11:22:40.037 回答
7

为此,我使用了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)

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

现在 Redis 还有十亿个其他的好处——而且它们本质上都一样简单。

于 2013-09-08T20:47:20.440 回答
2

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

可能不存在可以为您提供同时优化所有这些要求的理想解决方案的灵丹妙药。至于您问题的“附加”部分 - 是的,如果您仅将语言要求限制为 python,或者进一步区分关键要求和很好的要求,将会有更多可用的解决方案。

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

于 2013-02-02T10:49:44.517 回答
1

解决方案是dbus

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

于 2013-02-02T07:48:09.243 回答
1

我将在这里采取不同的策略,并说为什么不使用 Internet 上事实上的 RPC 语言?即 HTTP REST API?

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

  • 现有的 HTTP REST 工具(如 Postman)可以访问和测试您的服务器。
  • 这些相同的工具可以记录您的 API。
  • 如果您还使用 JSON,那么您也将获得很多适用于此的工具。
  • 您将获得经过验证的安全实践和解决方案(基于会话的安全性和 SSL)。
  • 对于许多不同的开发人员来说,这是一种熟悉的模式。
于 2019-03-07T20:43:18.367 回答