OVH Cloud OVH Cloud

probleme twisted avec reactor.run et reactor.stop

1 réponse
Avatar
maxime_phan
Bonjour tous, je me casse la tete depuis quelques jours sur ce
probleme.
Jai une application qui contient a la fois un serveur et un client.
Pour certaine raison je suis oblig=E9 de lancer le serveur dans un
thread et le client dans un autre. voici le code:

def client_webcam(self, x):
try:
protocol =3D ConnectedEchoClientDatagramProtocol()
reactor.connectUDP(self.Player.IPOpponent, 6901, protocol, 0, '',
40000)
reactor.run(installSignalHandlers=3D0)
except:
print "ERREUR CLIENT WEBCAM"
def server_webcam(self, x):
try:
reactor.listenUDP(6901, EchoUDP(self), '', 40000)
reactor.run(installSignalHandlers=3D0)
except:
print "ERREUR SERVER WEBCAM"

et le code des thread:
reactor.callInThread(self.client_webcam, "")
reactor.callInThread(self.server_webcam, "")

il y a donc 2 reactor.run, et le reactor.stop ne marche pas dans ce cas
la (il marche avec un seul reactor.run)
Dans mon cas, certaine chose font que je suis oblig=E9 de faire comme
=E7a avec 2 reactor.run. Le programme marche impec, c juste que jarrive
pas a le faire quitter avec reactor.stop.
Merci d'avance!!

1 réponse

Avatar
Lior Gradstein
Tu ne peux pas avoir deux reactor.run() en même temps. Si ton code
fonctionne, c'est vraiment un coup de bol. Si tu utilises des Deferred,
ils seront dans une ou l'autre des files d'attente du reacteur, mais
Twisted n'est pas au courant qu'il y a plus d'une file.
Plutôt que de te prendre la tête, pourquoi ne pas faire deux
programmes séparés ?

Luc

On Dec 4, 4:19 pm, ""
wrote:
Bonjour tous, je me casse la tete depuis quelques jours sur ce
probleme.
Jai une application qui contient a la fois un serveur et un client.
Pour certaine raison je suis obligé de lancer le serveur dans un
thread et le client dans un autre. voici le code:

def client_webcam(self, x):
try:
protocol = ConnectedEchoClientDatagramProtocol()
reactor.connectUDP(self.Player.IPOpponent, 6901, protocol, 0, '',
40000)
reactor.run(installSignalHandlers=0)
except:
print "ERREUR CLIENT WEBCAM"
def server_webcam(self, x):
try:
reactor.listenUDP(6901, EchoUDP(self), '', 40000)
reactor.run(installSignalHandlers=0)
except:
print "ERREUR SERVER WEBCAM"

et le code des thread:
reactor.callInThread(self.client_webcam, "")
reactor.callInThread(self.server_webcam, "")

il y a donc 2 reactor.run, et le reactor.stop ne marche pas dans ce cas
la (il marche avec un seul reactor.run)
Dans mon cas, certaine chose font que je suis obligé de faire comme
ça avec 2 reactor.run. Le programme marche impec, c juste que jarrive
pas a le faire quitter avec reactor.stop.
Merci d'avance!!