web-dev-qa-db-fra.com

Comment partager des données entre des threads dans ce TCPServer threadé?

Je travaille sur un projet qui implique l'envoi de données via TCP. En utilisant le ThreadedTCPServer, je peux déjà le faire. Le thread du serveur n'a besoin que de lire les chaînes de données entrantes et de définir la valeur des variables. Pendant ce temps, j'ai besoin du thread principal pour voir ces variables changer de valeur. Voici mon code jusqu'à présent, juste modifié à partir de l'exemple 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()

Donc, la façon dont cela devrait fonctionner est que le programme imprime constamment la valeur de x, et à mesure que de nouveaux messages arrivent, la valeur de x devrait changer. Il semble que le problème soit que le x qu'il imprime dans le thread principal n'est pas le même x auquel une nouvelle valeur est attribuée dans les threads du serveur. Comment puis-je changer la valeur de x dans le thread principal à partir de mon thread serveur?

18
David Lopez

Essayez de partager un Queue entre vos discussions.

Ressources utiles

  • ne introduction à Python Concurrency , une présentation de David Beazley, fournit une bonne introduction de Nice au multithreading, à la communication des threads et à la concurrence en général.
32
Anton Strogonoff