Python zeromq "Hello World" блокирует по recv () - PullRequest
1 голос
/ 10 ноября 2011

Я пытался заставить zeromq работать с Python на Fedora 11. Поскольку он нуждался в Python 2.7, я установил ActivePython. Я установил pyzmq, используя easy_install, и он установился нормально. Когда я запускаю пример Привет, мир отсюда:

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

Блокируется на:

socket.recv()

Я прочитал, что существуют проблемы, когда вы можете отправлять сообщения быстрее, чем клиент может их получить, и это может привести к тому, что клиент пропустит «первое» сообщение. Поэтому я не уверен, является ли это ожидаемым поведением или, по крайней мере, возможным поведением. Я бы подумал, что простой пример Hello World сработал бы из коробки ...

Что я пытаюсь выяснить, так это то, что код или моя установка вызывают проблему.

Кто-нибудь сталкивался с чем-то похожим?

1 Ответ

2 голосов
/ 10 ноября 2011

Если честно, я пропустил бит hello-world и пошел прямо к клиент-серверу Lazy Pirate. У этого были некоторые ошибки в версии Python в циклах повторов клиента, но по крайней мере он что-то сделал. Я добавил несколько операторов печати и установил правильную связь между клиентом и сервером.

После этого я написал сервер типа memcache, используя объекты JSON для своих тел сообщений. Например. {"CMD": "GET", "KEY": "Альберт Джонс"}

Пару месяцев спустя мне понадобился постоянный сервер значения ключа на работе для многопроцессорной системы, поэтому я превратил свой существующий код в сервер значения ключа SQLITE. Под «ключом-значением» я подразумеваю, что вся схема сервера представляла собой одну таблицу KVSTORE с двумя столбцами, KEY и VAL. Теперь у меня есть доступ к этому серверу до 40 клиентских процессов одновременно, без заминок.

Я также попробовал свои силы в написании сервера, который использует настоящий протокол memcache, используя asynchat, и он намного сложнее, чем при использовании ZeroMQ.

Так что мой совет - двигаться дальше. Если пример hello world не работает, попробуйте другой.

P.S. Если вам нужен портативный дистрибутив Python, который работает на Fedora или любом другом дистрибутиве, взгляните на https://github.com/wavetossed/pybuild В настоящее время вы должны построить его на системе Ubuntu, но полученный архив включает все зависимости общих библиотек и работает на Redhat. / Дистрибутивы в стиле RPM и SUSE / RPM. В нем много примеров создания сторонних библиотек, поэтому у вас не должно возникнуть проблем с добавлением ваших любимых модулей в ваш собственный дистрибутив Python.

...