Pregunta Compartir datos entre hilos en Python


Estoy trabajando en un proyecto que implica el envío de datos a través de TCP. Usando el ThreadedTCPServer ya puedo hacerlo. El hilo del servidor solo necesita leer las cadenas de datos entrantes y establecer el valor de las variables. Mientras tanto, necesito el hilo principal para ver esas variables cambiando el valor. Aquí está mi código hasta ahora, solo modificado desde el ejemplo de 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()

así que la forma en que esto debería funcionar es que el programa imprime constantemente el valor de x, y a medida que ingresen nuevos mensajes, el valor de x debería cambiar. Parece que el problema es que la x que imprime en el hilo principal no es la misma x a la que se le asigna un nuevo valor en los hilos del servidor. ¿Cómo puedo cambiar el valor de x en el hilo principal de mi hilo de servidor?

¡Gracias!


13
2018-04-16 18:28


origen


Respuestas:


Intenta compartir un Queue entre tus hilos.

Recursos útiles


24
2018-04-16 18:49