【问题标题】:Flexible IPC solution for Python on Linux? [closed]Linux 上 Python 的灵活 IPC 解决方案? [关闭]
【发布时间】:2013-02-21 21:02:30
【问题描述】:

我正在用 Python 编写一个程序,我正在考虑使用本地客户端-服务器模型,但我正在努力找出服务器与客户端通信的最佳方式。一个简单的、固定的解决方案是最好的——我不想重新发明轮子。这是我对这个程序的需求:

  • 在 Linux 上运行
  • 服务器和客户端在同一个系统上,所以我不需要通过网络。
  • 可能不会让交互式用户感到厌烦的延迟。
  • 多个客户端可以连接到同一个服务器。
  • 客户端独立于服务器启动,可以随时连接/断开连接。
  • 客户数以数十计;我不需要扩展得很高。
  • 客户端可以有几种不同的风格:
    1. 流读取器 - 读取连续的数据流(实际上,这都是文本)。
    2. 状态读取器 - 读取一些不时更新的状态信息。
    3. Writers - 向服务器发送一些数据,每次都会收到一些响应。

客户端类型 1 看起来很简单;这是一个单向哑管。客户端类型 2 更有趣一些。我想避免简单地轮询服务器以定期检查新数据,因为这会给用户增加明显的延迟。当状态信息更新时,服务器需要某种方式向所有且仅相关的客户端发出信号,以便客户端可以从服务器接收更新的状态。客户端类型 3 必须是双向的;它会将用户提供的数据发送到服务器,并在每次发送后接收某种响应。

我查看了 Python 的 IPC 页面 (http://docs.python.org/2/library/ipc.html),但我认为这些解决方案都不适合我的需求。 subprocess 模块完全不合适,其他一切都比我想要的低级。

类似的问题Efficient Python to Python IPC 不太一样;我不需要传输 Python 对象,我并不特别担心我将拥有的客户端数量的 CPU 效率,我只关心 Linux,而且这个问题的答案都没有对我特别有帮助。

更新:

我不能接受一个只是将我指向框架/库/模块/工具的答案,而实际上没有解释它如何用于我的三种不同的服务器-客户端关系。如果你说,“所有这些都可以通过命名管道来完成!”我将不得不问“如何?”代码 sn-ps 将是理想的,但解决方案的高级描述也可以工作。

【问题讨论】:

  • PyRo(Python 远程对象)怎么样?
  • @BartekBanachewicz 这似乎是为以 Python 对象的形式来回传递较短的特定消息而设计的,因此它适用于客户端类型 3(发送消息,接收响应),但似乎不太适合客户端类型 1(开放式流)和 2(需要我试图避免的定期轮询)。

标签: python linux client-server ipc


【解决方案1】:

您是否已经查看过ZeroMQ?它具有出色的 Python 支持,文档示例已经涵盖了您的用例。

它很容易在单一平台、单机设置上使用,但它可以很容易地扩展到网络。

【讨论】:

  • 一目了然,这很有用。不过,我没有看到涵盖我的用例的文档示例。我看到一堆例子,但我需要一些时间来挖掘并找到可能适合我的例子。您能否指出您发现的相关示例,以便我可以更快地评估这个库?
  • 我自己完成这堆工作后会立即更新答案。 :) 同时,这可以给你一个很好的介绍:slideshare.net/fcrippa/… 我看到 pub/sub 用于“状态阅读器”,而 push/pull 用于其他客户端(有一整章是关于请求-响应样式的)。
  • 谢谢。在阅读有关 ZeroMQ 的更多信息时,我发现了这个 StackOverflow 答案:stackoverflow.com/a/1687696/2141391,它声称“Zmq 支持许多高级消息传递场景,但是......您必须通过组合框架的各个部分来自己实现其中的大部分...... .” 这可能会使 ZeroMQ 不太理想。当然,如果示例实现的东西与我想要的足够接近,那可能是一个有争议的问题。
猜你喜欢
  • 1970-01-01
  • 2011-03-24
  • 1970-01-01
  • 2012-03-24
  • 2013-07-10
  • 1970-01-01
  • 2011-06-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多