Ce face Funcții sys pentru generatoare asincrone și corutine
set_asyncgen_hooks() înregistrează funcții apelate la prima iterare a unui generator asincron (firstiter) și când acesta trebuie închis (finalizer). asyncio le folosește ca să închidă corect generatoarele neterminate. get_asyncgen_hooks() returnează funcțiile curente.
set_coroutine_origin_tracking_depth(n) face ca fiecare corutină să rețină ultimele n cadre ale locului unde a fost creată, informație afișată în avertismentul „coroutine was never awaited”. Modul de depanare al asyncio o activează.
Ce returnează
Obiecte cu funcțiile înregistrate sau un întreg.
Exemple
Exemplul 1: Funcții înregistrate și originea corutinelor
import sys
print(sys.get_asyncgen_hooks())
sys.set_asyncgen_hooks(firstiter=lambda g: print("pornit:", g.__name__))
async def numere():
yield 1
g = numere()
try:
g.asend(None).send(None)
except StopIteration as e:
print("primit:", e.value)
sys.set_asyncgen_hooks(firstiter=None)
sys.set_coroutine_origin_tracking_depth(2)
async def lucru():
pass
c = lucru()
print(sys.get_coroutine_origin_tracking_depth(), c.cr_origin is not None)
c.close()
Rezultat
asyncgen_hooks(firstiter=None, finalizer=None)
pornit: numere
primit: 1
2 True
Greșeli frecvente
- Înlocuiești funcțiile setate de
asyncioîn timp ce rulează o buclă de evenimente; generatoarele asincrone nu mai sunt închise corect.
Comenzi înrudite
async / await: Scrie cod asincron: funcții care pot aștepta (rețea, fișiere, temporizări) fără să blocheze restul programului.yield (generatoare): Transformă o funcție într-un generator, care produce valorile una câte una, la cerere.