【问题标题】:Python zeromq "Hello World" blocks on recv()recv() 上的 Python zeromq“Hello World”块
【发布时间】:2011-11-10 11:31:18
【问题描述】:

我一直在尝试让 zeromq 在 Fedora 11 上使用 Python。因为它需要 Python 2.7,所以我安装了 ActivePython。我使用easy_install安装了pyzmq,它安装得很好。当我从这里运行 hello world 示例时:

http://zguide.zeromq.org/py:hwclient

它会阻塞:

socket.recv()

我了解到存在一些问题,即您发送消息的速度比客户端接收它们的速度要快,这可能导致客户端错过“第一条”消息。所以,我不确定这是否是预期的行为,或者至少是可能的行为。我原以为一个简单的 Hello World 示例可以开箱即用......

我想弄清楚是代码还是我的安装导致了问题。

有人遇到过类似的事情吗?

【问题讨论】:

  • 请原谅这个(可能)愚蠢的问题:你也在运行 helloworld 服务器吗?
  • @sarnold 不像你想象的那么傻。我承认我第一次运行它时,我没有注意,所以只有客户端运行......这次我肯定两者都有...... :)
  • hwserver 打印它收到的消息,它是否打印'Hello' 消息?如果没有,那么您的客户端和服务器实际上并没有相互连接。

标签: python zeromq


【解决方案1】:

说实话,我跳过了 hello-world 部分,直接进入了 Lazy Pirate 模式客户端-服务器。那个在客户端重试循环中的 Python 版本中确实存在一些错误,但至少它做了一些事情。我添加了一些打印语句并进行了正确的客户端-服务器通信。

之后,我使用 JSON 对象为我的消息体编写了一种 memcache 类型的服务器。例如。 {“CMD”:“GET”,“KEY”:“阿尔伯特·琼斯”}

几个月后,我需要一个用于多处理系统的持久键值服​​务器,因此我将现有代码转换为 SQLITE 键值服务器。通过“键值”,我的意思是服务器的整个架构是一个表 KVSTORE,有两列,KEY 和 VAL。我现在可以一次最多被 40 个客户端进程访问该服务器,没有任何问题。

我还尝试使用 asynchat 编写一个使用实际 memcache 协议的服务器,它比使用 ZeroMQ 复杂得多。

所以我的建议是继续前进。如果 hello world 示例不起作用,请尝试其他示例。

附:如果您想要在 Fedora 或任何其他发行版上运行的可移植 Python 发行版,请查看 https://github.com/wavetossed/pybuild 目前您必须在 Ubuntu 系统上构建它,但生成的 tarball 包含所有共享库依赖项并以 Redhat/RPM 样式运行发行版和 SUSE/RPM 风格的发行版。它有大量构建 3rd 方库的示例,因此您在将自己喜欢的模块添加到自己的 Python 发行版时应该不会遇到什么问题。

【讨论】:

    猜你喜欢
    • 2018-08-23
    • 2023-04-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多