この質問が基本的すぎる場合は申し訳ありません。Pythonでマルチスレッドソケットを使用するのはこれが初めてです。
基本的に、UDPServerソケットによって受信されているデータを取得するコードを作成しようとしています。ソケット自体はスレッド内で実行されています。メインスレッドがデータにアクセスできるようにするために、私はスレッドローカルストレージを使用しています(私が読んだすべてのものに基づいて、それを行う正しい方法のようです)。以下のコードは、それを機能させるための最初の試みですが、変数が適切に更新されていないようです。何が起こっているのかについて何か考えはありますか?
編集:実用的な例については、以下を参照してください
サーバ:
import socket
import threading
import SocketServer
data = threading.local()
class UDPHandler(SocketServer.BaseRequestHandler):
def handle(self):
data.outputString = self.request[0].strip()
class ThreadedUDPServer(SocketServer.ThreadingMixIn, SocketServer.UDPServer):
def __init__(self, serverAddress, handlerClass):
SocketServer.UDPServer.__init__(self, serverAddress, handlerClass)
data.outputString = ""
if __name__ == "__main__":
ReceiverSocket = ThreadedUDPServer(("localhost",11111), UDPHandler)
ServerThread = threading.Thread(target=ReceiverSocket.serve_forever)
ServerThread.daemon = True
ServerThread.start()
while 1:
if data.outputString:
print data.outputString
data.outputString = ""
クライアント:
import socket
import sys
HOST, PORT = "localhost", 11111
data = " ".join(sys.argv[1:])
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
sock.sendto(data + "\n", (HOST, PORT))
ありがとう!!