Ce face async / await
async def definește o corutină. Apelul ei nu rulează codul imediat, ci returnează un obiect care trebuie așteptat cu await sau pornit cu asyncio.run(). În timp ce o corutină așteaptă (de exemplu un răspuns din rețea), alte corutine pot lucra.
asyncio.gather() rulează mai multe corutine în paralel. async for parcurge iteratoare asincrone, iar async with folosește context managere asincrone.
Funcțiile încorporate aiter() și anext() (Python 3.10+) sunt versiunile asincrone ale lui iter() și next(); anext() trebuie așteptat cu await.
Exemple
Exemplul 1: Trei sarcini în paralel
Fiecare sarcină așteaptă 0,1-0,3 secunde, dar toate rulează în același timp, deci totalul este cât cea mai lungă.
import asyncio
async def descarca(nume, secunde):
await asyncio.sleep(secunde)
return f"{nume} gata"
async def main():
rezultate = await asyncio.gather(
descarca("imagine", 0.3),
descarca("text", 0.1),
descarca("video", 0.2),
)
print(rezultate)
asyncio.run(main())
Rezultat
['imagine gata', 'text gata', 'video gata']
Exemplul 2: Generator asincron, aiter() și anext()
import asyncio
async def numere(n):
for i in range(n):
await asyncio.sleep(0)
yield i
async def main():
async for x in numere(3):
print("async for:", x)
it = aiter(numere(5))
print("anext:", await anext(it), await anext(it))
print(await anext(aiter(numere(0)), "gol"))
asyncio.run(main())
Rezultat
async for: 0
async for: 1
async for: 2
anext: 0 1
gol
Greșeli frecvente
- Apelezi o corutină fără
await:descarca("x", 1). Codul nu rulează, iar Python afișeazăRuntimeWarning: coroutine ... was never awaited. - Folosești
time.sleep()într-o funcțieasync. Blochează tot programul; foloseșteawait asyncio.sleep().
Comenzi înrudite
def: Definește o funcție: un bloc de cod cu nume, pe care îl poți apela de oricâte ori.yield (generatoare): Transformă o funcție într-un generator, care produce valorile una câte una, la cerere.iter() și next(): iter() obține un iterator dintr-o colecție; next() ia următorul element din iterator.open() și with: Deschide un fișier pentru citire sau scriere; cu with, fișierul este închis automat.