10

一度に複数のソケットを聞くことはできますか

現在、ソケットを監視するために使用しているコードは次のとおりです。

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

メッセージを受信するまで。

一度に複数のソケットをリッスンさせる方法はありますか?

編集:それが完全に関連しているかどうかはわかりませんが、UDPを使用しています

4

2 に答える 2

12

はいあります。ソケットから受信するには、非ブロッキング呼び出しを使用する必要があります。選択モジュールをチェックアウト

ソケットから読み取る場合は、次のように使用します。

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()タイムアウトである追加の引数を渡すこともできます。これにより、ソケットの準備ができていない場合でも、永久にブロックされなくなります。

于 2013-02-26T23:33:53.560 に答える