|
|
|
|
Bonjour,
Mon problème est que j'ai un thread et une GUI (wxPython)
Et ce thread doit mettre à jour la GUI grâce à une fonction faite pour, mais le problème c'est que si j'hérite de la classe GUI python me renvoie une erreur à l'éxecution de la fonction (variable qui n'est pas de la class ThreadReception)
Alors j'ai mit la gui dans une variable global (oui je sais c'est mal ^^) j'aimerais donc savoir si il est possible de fair autrement?
J'ai cherché sur google pendant plusieurs heures sans aucun résultats, merci de votre aide =)
Configuration: Linux Firefox 3.0
# -*- coding: Latin-1 -*-
|
Les interfaces graphiques ne sont pas thread-safe !
|
Pour ré-expliquer les choses autrement:
|
Mais si je fait une verification tout les temps et temps la GUI va ce bloqué non ?
|
Voila j'ai fait ce que tu ma dit et ça fonctionne à merveille =)
|
Je suis content que ça marche :-))
|
Non sur mon serveur je n'ai qu'un thread et j'ai mit des message pour que les threads s'arrete.
def OnDeco(self):
self.thR.stop()
self.connection.close()
self.thR.join()
self.thR=None
self.updatetxt("Vous êtes maintenant déconnecté")
self.connected=False
def on_timer(self,event):
try :
msg=msgStock.get_nowait()
if msg == 'QUIT' :
self.OnDeco()
elif msg == 'EXIT' :
try :
self.OnDeco()
except : pass
self.Destroy()
else :
self.updatetxt(msg)
except :
pass
Et pour le serveur : class ThreadClient(Thread): def __init__(self,connexion): Thread.__init__(self) self.connexion=connexion def run(self): nom=self.getName() while 1 : msgclient=self.connexion.recv(1024) if msgclient == 'QUIT' : for i in nbrclient : nbrclient[i].send(msgclient) break else : print nom,msgclient for i in nbrclient : nbrclient[i].send(msgclient) self.connexion.close() del nbrclient[nom] print "Client %s déconnecté" %(nom) Voila c'est ça que je comprend pas en faite ^^ Ca fonctionne bien si depuis le client j'envoie la commande 'QUIT' alors les threads s'arrete des 2 cotés mais si je le kill sauvagement bah ... ^^ J'ai vais essayer de mettre un timeout =) Sinon bah je le ferais en http mais le problème c'est que je ne sait pas véhiculer des messages à travers celui-ci. J'ai juste réussi a faire un petit serveur Http en LAN pour transferer des données sur 2 OS différent |
Pour en revenir à XML-RPC, j'ai trouvé une bonne page qui explique ça:
import calendar, SimpleXMLRPCServer
class Calendar:
def getMonth(self, year, month):
return calendar.month(year, month)
def getYear(self, year):
return calendar.calendar(year)
calendar_object = Calendar()
server = SimpleXMLRPCServer.SimpleXMLRPCServer(("localhost", 8888))
server.register_instance(calendar_object)
print "Listening on port 8888"
server.serve_forever()
Et le cilent: import xmlrpclib
server = xmlrpclib.ServerProxy("http://localhost:8888")
month = server.getMonth(2002, 8)
print month
Ce qui est remarquable, c'est la simplicité coté client: On déclare juste un serveur et on appelle une fonction sur le serveur. Cela simplifie grandement les choses. |
Tiens tant qu'on y est, j'ai mis un exemple encore plus simple de client/serveur XML-RPC sur mon site:
|