2014-01-09 2 views
0

Загрузите источник zguide из github. Я нахожу пример python code-wuserver.py не работает. Запустите wuserver.py и wuclient.py, wuclient.py не может возвращать данные, но если я запустил c-код-wuserver.c, wuclient.py сможет получить данные recv.[zguide] pyzmq Публикация не работает

wuserver.py

# 
# Weather update server 
# Binds PUB socket to tcp://*:5556 
# Publishes random weather updates 
# 

import zmq 
from random import randrange 


context = zmq.Context() 
socket = context.socket(zmq.PUB) 
socket.bind("tcp://*:5556") 

while True: 
    zipcode = randrange(1, 100000) 
    temperature = randrange(-80, 135) 
    relhumidity = randrange(10, 60) 

    socket.send_string("%i %i %i" % (zipcode, temperature, relhumidity)) 

wuclient.py

# 
# Weather update client 
# Connects SUB socket to tcp://localhost:5556 
# Collects weather updates and finds avg temp in zipcode 
# 

import sys 
import zmq 


# Socket to talk to server 
context = zmq.Context() 
socket = context.socket(zmq.SUB) 

print("Collecting updates from weather server...") 
socket.connect("tcp://localhost:5556") 

# Subscribe to zipcode, default is NYC, 10001 
zip_filter = sys.argv[1] if len(sys.argv) > 1 else "10001" 

# Python 2 - ascii bytes to unicode str 
if isinstance(zip_filter, bytes): 
    zip_filter = zip_filter.decode('ascii') 
socket.setsockopt_string(zmq.SUBSCRIBE, zip_filter) 

# Process 5 updates 
total_temp = 0 
for update_nbr in range(5): 
    string = socket.recv_string() 
    zipcode, temperature, relhumidity = string.split() 
    total_temp += int(temperature) 

print("Average temperature for zipcode '%s' was %dF" % (
     zip_filter, total_temp/update_nbr) 
) 
+0

Можете ли вы предоставить немного больше информации (версии zeromq, pyzmq, ОС и т. Д.)? Как именно вы используете пример? – minrk

ответ

2

Я попробовал его и нет ничего плохого. Вы можете изменить wuclient.py код, чтобы увидеть то, что было передано:

for update_nbr in range(5): 
    string = socket.recv_string() 
    zipcode, temperature, relhumidity = string.split() 
    print(string) # add this statement 
    total_temp += int(temperature) 

Затем вы должны запустить wuclient.pyпервый, а затем wuserver.py.

P.S .: Документация zguide обеспечивает очень четкий способ отладки проблемы с отсутствующим сообщением, что может быть очень полезно. Вот Missing Message Problem Solver

Смежные вопросы