0

簡単なことをしたいと思います。2つのポートをバインドして着信接続を待機し、アプリケーションコードを継続します。これがコードです。

import socket
import threading
import Queue

q = Queue.Queue()
q2 = Queue.Queue()

def escucha_9003():

    s = socket.socket()
    s.bind(("localhost",9023))
    s.listen(10) 
    sc, address = s.accept()
    q.put(sc)



def escucha_9004():

    s2 = socket.socket()
    s2.bind(("localhost",9024))
    s2.listen(10) 
    sc2, address2 = s2.accept()
    q.put(sc2)

hilo = threading.Thread(target=escucha_9003).start()
sc2=q.get()
hilo2 = threading.Thread(target=escucha_9004).start()
sc=q2.get()

print "i never arrive here"

各関数で返されるいくつかのパラメーターを取得する必要があります。私はそれを行うためにキューライブラリを使用します。しかし、問題は、コードを使い続けたいので、行にたどり着かないことです。「ここにたどり着かない」と印刷します。少なくともそれは決して印刷されません。

これらの2つのスレッドを起動した後、開発を継続し、着信接続を操作するには、どのように行う必要がありますか。

どうもありがとうございます

4

1 に答える 1

0

両方の.get()呼び出しが呼び出しをブロックしています。また、.accept()スレッド内の呼び出しがブロックされています。.accept()技術的には、クライアントからの接続がない場合は、2つの呼び出しを通過することはできません。メインスレッドはget()キューからの呼び出しを待機していますが、スレッドは将来の接続の受け入れを待機しているため、キューは何も配置しません。

あなたがする必要があるのは、メインスレッドの内部ではなく、スレッド内からキューを処理することです。それ以外の場合は、イベントループ内で使用する必要があり.get(timeout=someSeconds)ます。このループでは、キュー内のデータを一定時間チェックし続けてから、さらに継続的な処理を実行します。

達成しようとしていることを正確に説明してから、メインスレッドがデータを受信するのをブロックする前に、これらのスレッドを再構築して、独自の作業をもう少し処理することをお勧めします。

于 2012-12-31T05:46:03.687 に答える