Python zeromq "Hello World" 在recv()上阻塞
我一直在尝试在Fedora 11上用Python运行zeromq。因为它需要Python 2.7,所以我安装了ActivePython。我通过easy_install安装了pyzmq,安装得很顺利。当我运行这里的Hello World示例时:
http://zguide.zeromq.org/py:hwclient
程序在以下代码处卡住了:
socket.recv()
我听说过一些问题,比如发送消息的速度比客户端接收的速度快,这可能导致客户端错过“第一个”消息。所以,我不太确定这是否是正常现象,或者至少是可能发生的情况。我本以为一个简单的Hello World示例应该可以直接运行...
我想弄清楚到底是代码的问题,还是我的安装出了问题。
有没有人遇到过类似的情况?
1 个回答
老实说,我跳过了“你好,世界”的部分,直接看了懒惰海盗模式的客户端和服务器。那个在Python版本的客户端重试循环中确实有一些bug,但至少它能做点事情。我加了一些打印语句,成功实现了客户端和服务器之间的通信。
之后,我用JSON对象写了一个类似于memcache的服务器,消息内容像这样:{"CMD": "GET", "KEY": "Albert Jones" }。
几个月后,我在工作中需要一个持久的键值服务器,用于一个多进程系统,所以我把现有的代码改成了一个SQLite键值服务器。这里的“键值”意思是服务器的整个结构就是一个名为KVSTORE的表,里面有两列,KEY和VAL。现在这个服务器可以同时被多达40个客户端进程访问,而且没有任何问题。
我还尝试过写一个使用实际memcache协议的服务器,使用asynchat,但这比使用ZeroMQ要复杂得多。
所以我的建议是,继续前进。如果“你好,世界”的例子不管用,就试试其他的。
附言:如果你想要一个可以在Fedora或其他发行版上运行的便携式Python版本,可以看看https://github.com/wavetossed/pybuild。目前你需要在Ubuntu系统上构建它,但生成的压缩包包含了所有共享库的依赖,可以在Redhat/RPM风格和SUSE/RPM风格的发行版上运行。里面有很多构建第三方库的例子,所以你在给自己的Python版本添加喜欢的模块时应该不会遇到太多问题。