2013-05-10 3 views
0

Je cherchais à faire un multithread (2 threads) en python.Pause d'un fil de l'autre en python

Je veux que l'un d'eux lit constamment le port série. lire chaque image et les enregistrer dans une base de données. J'ai déjà fait un script pour le faire.

Pour le second, je veux qu'il écoute un port de socket. Quand il reçoit quelque chose de ce port, je veux qu'il arrête le premier thread, écrit quelque chose sur le port série et écrit sur le socket. Après cela, désactivez le premier thread et revenez pour écouter le port socket.

Je pense que la meilleure idée est de mettre en pause un fil de l'autre pour lire le port série à ce moment parce que si je lis la réponse par port série dans le 1e thread, je dois passer la valeur au second plus compliqué, n'est-ce pas?

Je ai déjà la partie de l'écriture sur le port série et vérifier quelques tutoriels pour la partie socket afin que je n'ai aucun problème avec cela. Mais je n'ai rien trouvé à propos de mettre en pause un fil d'un autre et je pense que ce n'est pas possible.

Que dois-je faire dans ce cas?

EDIT: Renseignez-vous sur les variables partagées: Je peux donc déclarer une variable globale et faire quelque chose comme:

global1 
global2 
Thread 1: 

while(global1 == 0) 
    do whatever 
global2 = 1 

thread 2: 
    wait socket 
    if dataReceived: global1 = 1 
    if global2 = 1 do whatever on serial port 
    global2 = 0 
    when finish global1 = 0 

avec 2 GLOBALS Je peux notifier Thread1 arrêter pour aller de l'avant la prochaine itération et global2, la deuxième thread sait quand le port série n'est pas utilisé ...

Comment déclarer une variable partagée en python? ou il est juste une autre variable ....

+2

avoir qu'un seul contrôle de fil du port série. Il doit boucler entre l'écoute du port série et la vérification d'une file d'attente pour les éléments à écrire. L'autre thread peut écrire dans la file d'attente chaque fois qu'il a besoin de quelque chose pour aller sur le port. –

+0

Ainsi, les threads peuvent modifier une variable et lire le résultat avec un autre thread ... Je ne le savais pas. J'ai toujours pensé que le partage de données entre les threads était compliqué. – Biribu

+0

Il est facile de partager des données entre les threads, mais cela peut provoquer des conditions de course et d'autres joies, alors soyez prudent :) Si c'est un simple booléen étant partagé, vous ne devriez pas besoin de mutex ou de synchronisation. – Brady

Répondre

Questions connexes