multithreading - ¿Cómo compartir datos entre hilos en este TCPServer de hilos?
python-2.6 (1)
Estoy trabajando en un proyecto que implica el envío de datos a través de TCP. Usando el ThreadedTCPServer ya puedo hacer eso. El hilo del servidor solo necesita leer cadenas de datos entrantes y establecer el valor de las variables. Mientras tanto, necesito que el hilo principal vea las variables cambiando de valor. Aquí está mi código hasta ahora, recién modificado del 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()
Entonces, la forma en que debería funcionar es que el programa imprime constantemente el valor de x, y a medida que aparecen nuevos mensajes, el valor de x debe cambiar. Parece que el problema es que la x que se 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?
Intenta compartir una Queue
entre tus hilos.
Recursos utiles
- Una Introducción a Python Concurrency , una presentación de David Beazley, proporciona una buena introducción para el multihilo, la comunicación de hilos y la concurrencia en general.