2013-02-26 3 views
5

я могу слушать тройники сразуЕсть ли способ слушать тройники питона сразу

код, я использую, чтобы отслеживать сокеты на данный момент:

while True: 
    for sock in socks: 
     data, addr = sock.recvfrom(1024) # buffer size is 1024 bytes 
     print "received message:", data 

но ждет на линии:

data, addr = sock.recvfrom(1024) # buffer size is 1024 bytes 

до получения сообщения.

Есть ли способ сделать это слушать тройники сразу

EDIT: не уверен, что если она полностью релевантная, но я использую UDP

ответ

9

Да, есть. Вам нужно использовать неблокирующие вызовы для приема из сокетов. Проверьте select module

Если вы читаете из гнезд здесь, как вы его используете:

while True: 
    # this will block until at least one socket is ready 
    ready_socks,_,_ = select.select(socks, [], []) 
    for sock in ready_socks: 
     data, addr = sock.recvfrom(1024) # This is will not block 
     print "received message:", data 

Примечание: Вы можете также передать дополнительный аргумент select.select() который является тайм-аут. Это предотвратит блокировку навсегда, если сокеты не будут готовы.

+0

спасибо, что работал отлично, [этот пример] (http://www.ibm.com/developerworks/linux/tutorials/l-pysocks/section4.html) также был очень полезен – Calum

+0

Рад помочь? :) – entropy

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