4

私は最近プログラムに取り組んでおり (以前の質問からわかるように)、マルチスレッドを理解して実装するのに本当に苦労しています。

UDPサーバーをセットアップするためのチュートリアル(バイナリタイド)に従いましたが、これはうまく機能します。ただし、私が抱えている問題は、新しいスレッドでブロッキング UDP ソケットを作成すると、最初にスレッドを作成したメイン プログラムにあるコードが機能しないことです。これが私のコードの一部です:

main.py:

from thread import*
import connections


start_new_thread(networkStart.startConnecton())
print 'This should print!'

networkStart.py:

def startConnecton():
    userData.s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)  
    print 'Socket created'
    try:
        userData.s.bind((HOST, PORT))
    except socket.error, msg:
        print 'Bind failed. Error code: ' +str(msg[0]) + 'Message' +msg[1]
        sys.exit()
    print 'Socket bind complete'
    userData.s.listen(10) 
    # Set the socket to listening mode, if there are more than 10 connections waiting reject the rest
    print 'Socket now listening' 
    #Function for handling connections. Each new connection is handled on a separate thread
    start_new_thread(connections.connectionListen())

connections.py:

def connectionListen():
    while 1:
            print 'waiting for connection'
            #wait to accept a connection - blocking call
            conn, addr = userData.s.accept()
            userData.clients += 1
            print 'Connected with ' + addr[0] + ':' + str(addr[1])
            #start new thread takes 1st argument as a function name to be run, second is the tuple of arguments 
            start_new_thread(users.clientthread ,(conn, userData.clients))

私は基本的に、新しいスレッドで startConnection 関数が呼び出された後 (つまり、このインスタンスで文字列を出力する)、main.py 内の任意のコードを実行できるようにしたいだけです。

私はかなり長い間このプログラムに苦労してきました.Pythonは私にとって初めてで、非常に難しいと感じています. マルチスレッドを実装した方法でいくつかのエラーを犯しているに違いないと思います。どんな助けでも大歓迎です!

4

1 に答える 1

5

start_new_thread関数と引数リストを受け取りますが、関数呼び出し: を直接使用していますstart_new_thread(networkStart.startConnecton())

ただし、より高いレベルの抽象化を持つthreadingモジュールを使用することをお勧めします (公式ドキュメントではそうしています)。

import threading
import connections

threading.Thread(target=networkStart.startConnecton).start()
print 'This should print!'
于 2013-03-14T16:21:56.977 に答える