Обмен данными между потоками в Python
Я работаю над проектом, который включает в себя отправку данных по TCP. Используя ThreadedTCPServer, я уже могу это сделать. Потоку сервера нужно только прочитать входящие строки данных и установить значение переменных. Между тем мне нужен основной поток, чтобы увидеть, как эти переменные меняют значение. Вот мой код до сих пор, только что измененный из примера ThreadedTCPServer:
import socket
import threading
import SocketServer
x =0
class ThreadedTCPRequestHandler(SocketServer.BaseRequestHandler):
def handle(self):
data = self.request.recv(1024)
# a few lines of code in order to decipher the string of data incoming
x = 0, 1, 2, etc.. #depending on the data string it just received
class ThreadedTCPServer(SocketServer.ThreadingMixIn, SocketServer.TCPServer):
pass
if __name__ == "__main__":
# Port 0 means to select an arbitrary unused port
HOST, PORT = 192.168.1.50, 5000
server = ThreadedTCPServer((HOST, PORT), ThreadedTCPRequestHandler)
# Start a thread with the server -- that thread will then start one
# more thread for each request
server_thread = threading.Thread(target=server.serve_forever)
# Exit the server thread when the main thread terminates
server_thread.daemon = True
server_thread.start()
print "Server loop running in thread:", server_thread.name
while True:
print x
time.sleep(1)
server.shutdown()
таким образом, это должно работать так, что программа постоянно печатает значение x и как новое сообщения приходят в значение x должно меняться. Похоже, проблема в том, что x, который он печатает в основном потоке, не является тем же x, которому присваивается новое значение в потоках сервера. Как изменить значение x в основном потоке из моего потока сервера?
спасибо!
1 ответов
попробуйте обмена Queue
между потоками.
полезные ресурсы
- введение в параллелизм Python, презентация Дэвида Бизли, обеспечивает хорошее вступление к многопоточности, потоковой связи и параллелизму в целом.