2013-02-26 12 views
5

Posso ascoltare prese multiple in una sola voltaC'è un modo per ascoltare prese multiple pitone in una sola volta

Il codice che sto usando per monitorare le prese in questo momento è:

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

ma che attende sulla linea:

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

finché non riceve un messaggio.

C'è un modo per farlo ascoltare a prese multiple in una sola volta

EDIT: Non so se è del tutto pertinente, ma io sto usando UDP

risposta

9

Sì, c'è. È necessario utilizzare chiamate non bloccanti per ricevere dai socket. Controlla la select module

Se stai leggendo dalle prese qui è come lo si utilizza:

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 

Nota: si può anche passare un argomento in più per select.select() che è un timeout. Ciò impedirà il blocco per sempre se nessuna presa è pronta.

+0

grazie che ha funzionato perfettamente, [questo esempio] (http://www.ibm.com/developerworks/linux/tutorials/l-pysocks/section4.html) era anche molto utile – Calum

+0

Felice di essere stato di aiuto :) – entropy

Problemi correlati