[英]Python SocketServer passing data to the main thread via Thread local storage
很抱歉,如果這個問題太基礎了 - 這是我第一次嘗試在Python中使用多線程套接字。
基本上,我正在嘗試編寫獲取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))
謝謝!!
使它工作。 是的 - 本地線程與此無關...... :)
我已經設置了一個全局變量,並在修改它的每個函數中將其定義為全局變量(根據這個非常有用的答案 )
import socket
import threading
import SocketServer
data = ""
class UDPHandler(SocketServer.BaseRequestHandler):
def handle(self):
global data
data = self.request[0].strip()
class ThreadedUDPServer(SocketServer.ThreadingMixIn, SocketServer.UDPServer):
pass
if __name__ == "__main__":
ReceiverSocket = ThreadedUDPServer(("localhost",11111), UDPHandler)
ServerThread = threading.Thread(target=ReceiverSocket.serve_forever)
ServerThread.start()
while 1:
if data:
print data
data = ""
嘗試使用全局變量但請確保在每個線程和函數中將其定義為全局變量
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.