对不起,如果这个问题太基本了 - 这是我第一次尝试在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))
谢谢!