Sobes.tech
Middle

Ce este programarea asincronă (async)?

sobes.tech AI

Răspuns de la AI

Programarea asincronă este un paradigm care permite executarea mai multor sarcini simultan, fără a bloca firul principal de execuție al programului. Acest lucru se realizează prin utilizarea eficientă a timpului de așteptare (de exemplu, în cazul operațiilor de intrare/ieșire).

Concepte principale:

  • Corutine: Funcții speciale care pot suspenda execuția și o pot relua mai târziu. Sunt declarate cu async def.
  • Loop de evenimente: Orchestratorul principal care gestionează execuția corutinelor, monitorizează evenimentele și comută între sarcini atunci când una dintre ele așteaptă.
  • await: Cuvânt cheie pentru a suspenda execuția unei corutine până când operația așteptată se finalizează (de exemplu, apelarea altei corutine sau așteptarea rezultatului I/O).

Exemplu:

// Exemplu de funcție asincronă
import asyncio

async def fetch_url(url):
    print(f"Încep încărcarea: {url}")
    await asyncio.sleep(2) // Simulare a unei operații lungi (de exemplu, solicitare de rețea)
    print(f"Încărcare finalizată: {url}")

async def main():
    # Creăm sarcini din corutine
    task1 = asyncio.create_task(fetch_url("http://example.com/page1"))
    task2 = asyncio.create_task(fetch_url("http://example.com/page2"))

    # Așteptăm finalizarea ambelor sarcini
    await task1
    await task2

// Pornim loop-ul de evenimente
if __name__ == "__main__":
    asyncio.run(main())

Avantaje:

  • Creșterea performanței: În special pentru sarcini legate de I/O (solicitări de rețea, lucru cu fișiere).
  • Utilizare mai bună a resurselor: Nu se creează multiple fire de execuție sau procese, ceea ce reduce costurile suplimentare.
  • Menținerea receptivității: Firul principal nu este blocat, ceea ce este important pentru aplicații interactive sau servere.

Programarea asincronă este potrivită pentru:

  • Servere web (de exemplu, cu asyncio sau FastAPI).
  • Parsarea site-urilor web.
  • Lucrul cu baze de date.
  • Orice sarcină legată de așteptarea resurselor externe.