Подтвердить что ты не робот

Обмен данными между потоками в 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 в основном потоке из моего потока сервера?

Благодарю!

4b9b3361

Ответ 1

Попробуйте совместно использовать Queue между потоками.

Полезные ресурсы

  • Введение в Python Concurrency, презентация Дэвида Бэзли, обеспечивает хорошее вступление в многопоточность, потоковую связь и параллелизм в целом.