Sobes.tech
Middle

Čo je funkcia wait() a ako sa používa v Pythone?

sobes.tech AI

Odpoveď od AI

Funkcia wait() sa vyskytuje v kontexte viacprocesového, viacvláknového a sieťového interakcie. V štandardnej knižnici Pythonu sa zvyčajne vzťahuje na:

  • Modul subprocess: čakanie na ukončenie dieťaťa procesu.
  • Modul threading: čakanie na ukončenie vykonávania vlákna.
  • Modul socket: čakanie na udalosti na sockete (pri použití nízkoúrovňových funkcií).

V subprocess: Metóda wait() objektu Popen blokuje vykonávanie aktuálneho programu, kým dieťaťový proces neskončí. Vráti kód ukončenia dieťaťového procesu.

// Príklad použitia wait() v subprocess
import subprocess

process = subprocess.Popen(['ls', '-l'], stdout=subprocess.PIPE)
return_code = process.wait() // Čakanie na ukončenie procesu
print(f"Proces skončil s kódom: {return_code}")
output, error = process.communicate() // Získanie výstupu po ukončení
print(output.decode())

V threading: Metóda join() objektu Thread (ktorá je v podstate ekvivalent wait() pre vlákna) blokuje vykonávanie aktuálneho vlákna, kým vlákno, na ktoré je volaná, neskončí.

// Príklad použitia join() v threading
import threading
import time

def worker():
    print("Pracovné vlákno začalo")
    time.sleep(2)
    print("Pracovné vlákno skončilo")

thread = threading.Thread(target=worker)
thread.start()
thread.join() // Čakanie na ukončenie pracovného vlákna
print("Hlavné vlákno skončilo")

V socket: Na nízkej úrovni, v soketoch, pri použití select alebo poll, sa koncept čakania realizuje blokovaním týchto funkcií, kým nedôjde k udalosti vstupu/výstupu na niektorom zo sledovaných soketov. Hoci neexistuje priama wait() metóda, blokujúci charakter týchto funkcií je ekvivalentný s čakaním.


Dôležité je pochopiť, že wait() (alebo jeho ekvivalent) spôsobuje blokovanie. V asynchrónnom programovaní (s použitím asyncio) sa používajú iné mechanizmy na čakanie, ako napríklad await.