對不起,如果這個問題太基本了 - 這是我第一次嘗試在Python中使用多線程套接字。Python SocketServer通過線程本地存儲將數據傳遞到主線程
基本上,我試圖編寫獲取UDPServer套接字接收數據的代碼;套接字本身在線程中運行。 爲了讓主線程可以訪問數據,我使用了Thread本地存儲(看起來這是根據我讀的所有內容做的正確方法)。下面的代碼是我第一次嘗試使它工作,但該變量似乎沒有正確更新。任何關於可能發生什麼的想法?
編輯:請參閱下面的工作示例
服務器:
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))
謝謝!