Comment attendre que le premier thread soit terminé en Python
L'exigence est de commencer à cinq fils, et attendez que dans la manière la plus rapide du fil. Tous les cinq fils est allé chercher les mêmes données 5 directions, et on est assez pour continuer le flux de contrôle.
En fait, j'ai besoin d'attendre pour les deux premiers fils de retour, afin de vérifier les uns contre les autres. Mais je suppose que si je sais comment attendre pour le plus rapide. Je peux comprendre comment attendre la deuxième plus forte.
Beaucoup parler de join(timeout)
mais vous ne savez pas à l'avance à attendre (ce qui demande join
à l'avance).
source d'informationauteur Peer Gynt
Vous devez vous connecter pour publier un commentaire.
Utiliser une file d'attente: chaque thread une fois rempli met le résultat dans la file d'attente et ensuite vous avez juste besoin de lire le nombre de résultats et d'ignorer le reste:
Documentation pour
Queue.get()
(sans arguments, c'est équivalent àQueue.get(True, None)
:Si vous avez une sorte de boucle de traitement dans vos discussions, le code suivant va les terminer lorsque l'on met fin à l'aide d'un le filetage.Event():
Si votre processus est "bon marché" ou une seule requête-réponse de type thread (c'est à dire, par exemple, une requête HTTP asynchrone) puis Duncan répondre est une bonne approche.
Vous pouvez utiliser un événement pour cela. Voir http://docs.python.org/2/library/threading.html#event-objects
L'idée est que les threads de déclencher un événement quand ils sont finis. Le thread principal attend pour cet événement avant continueing. Le thread de travail peut définir un (mutexed) variable afin d'identifier lui-même avec l'événement.
Ou tout simplement garder une trace de tous les finis de threads dans une liste et de laisser le second thread pour terminer la gérer tout ce qui est censé être fait, Python, les listes sont des threads.
Duncan méthode est probablement la meilleure et est ce que je recommanderais. J'ai été légèrement agacé par le manque de "attendre pour la prochaine terminé thread terminer" avant, donc j'ai juste écrit ça à l'essayer. Semble fonctionner. Utilisez simplement
MWThread
en place dethreading.thread
et vous obtenez cette nouvellewait_for_thread
fonction.Les variables globales sont un peu klunky; une autre serait de le faire au niveau de la classe de variables. Mais si c'est caché dans un module (mwthread.py ou quoi que ce soit) il faut bien de toute façon.