Qu'est-ce que la fonction wait() et comment l'utiliser en Python?
sobes.tech IA
Réponse de l'IA
La fonction wait() se trouve dans le contexte du multiprocessus, du multithreading et de l'interaction réseau. Dans la bibliothèque standard de Python, elle se réfère généralement à :
- Module
subprocess: attendre la fin d'un processus enfant. - Module
threading: attendre la fin de l'exécution d'un thread. - Module
socket: attendre des événements sur une socket (lors de l'utilisation de fonctions de bas niveau).
Dans subprocess :
La méthode wait() de l'objet Popen bloque l'exécution du programme actuel jusqu'à ce que le processus enfant se termine. Elle renvoie le code de sortie du processus enfant.
// Exemple d'utilisation de wait() dans subprocess
import subprocess
process = subprocess.Popen(['ls', '-l'], stdout=subprocess.PIPE)
return_code = process.wait() // Attente de la fin du processus
print(f"Processus terminé avec le code de retour : {return_code}")
output, error = process.communicate() // Récupération de la sortie après la fin
print(output.decode())
Dans threading :
La méthode join() de l'objet Thread (qui est, en quelque sorte, un équivalent de wait() pour les threads) bloque l'exécution du thread courant jusqu'à ce que le thread sur lequel join() est appelé se termine.
// Exemple d'utilisation de join() dans threading
import threading
import time
def worker():
print("Thread de travail démarré")
time.sleep(2)
print("Thread de travail terminé")
thread = threading.Thread(target=worker)
thread.start()
thread.join() // Attente de la fin du thread worker
print("Thread principal terminé")
Dans socket :
Dans les sockets de bas niveau, lors de l'utilisation de select ou poll, la notion d'attente est implémentée via le blocage de ces fonctions jusqu'à ce qu'un événement d'entrée/sortie se produise sur l'un des sockets surveillés. Bien qu'il n'existe pas de méthode wait() directe, le caractère bloquant de ces fonctions est équivalent à une attente.
Il est important de comprendre que wait() (ou ses analogues) provoque un blocage. En programmation asynchrone (avec asyncio), d'autres mécanismes d'attente sont utilisés, comme await.