Ce que je veux faire :
- Exécuter TCPServer dans un fil de discussion
- Obtenir des données "Recevoir de la prise"
- Mettre à jour le tracé et afficher les données
Ce que j'ai fait avec succès :
- Un cadre avec wxPython a un bouton,
- cliquez sur le bouton démarrer la prise
- Réception des données du socket
Le problème :
-
Lorsque j'essaie d'appeler la fonction de traçage à partir du thread TCPServer, je reçois cette erreur
"PyAssertionError: C++ assertion "wxThread::IsMain()" failed at ..\..\src\common\timercmn.cpp(66) in wxTimerBase::Start(): timer can only be started from the main thread "
Le code :
-
Principal, où je commence le fil
def start_socket(self): HOST = '' PORT_A = 6340 self.server_A = ThreadedTCPServer((HOST, PORT_A), ThreadedTCPRequestHandler) self.server_temp = self.server_A self.server_A_thread = threading.Thread(target=self.server_A.serve_forever) self.server_A_thread.setDaemon(True) self.server_A_thread.start()
-
Le fil, où j'essaie de comploter :
class ThreadedTCPRequestHandler(SocketServer.BaseRequestHandler): def handle(self): self.Main = Main(None, -1, '') self.data = self.request.recv(1024).strip() print "%s wrote: " % self.client_address[0] print self.data plt.ion() self.fig = plt.figure(1) print self.image_scale ax = self.fig.add_subplot(111) self.image_scale = ([1,2], [ 4,10 ] ) cax = plt.imshow(self.image_scale, cmap='Greys', interpolation='nearest' ) draw()
Avec le débogage, l'erreur provient de cette ligne :
self.fig = plt.figure(1)
Error: "timer can only be started from the main thread"
Donc, je ne suis pas sûr, mais je pense que je dois faire le traçage dans la fonction principale de wx.Frame. Y a-t-il une solution qui permette de garder le programme normal en cours d'exécution, et de permettre le traçage en temps réel dans un autre thread ? En particulier, j'ai l'intention de créer plus d'un thread TCPServer.
Merci d'avance, votre aide sera très appréciée.