Sobes.tech
Middle

Kas yra asinchroninis programavimas (async)?

sobes.tech AI

Atsakymas iš AI

Asinchroninė programavimas — tai paradigma, leidžianti vykdyti daugybę užduočių vienu metu, neblokuojant pagrindinio programos srauto. Tai pasiekiama efektyviai naudojant laukimo laiką (pavyzdžiui, įvesties-išvesties operacijose).

Pagrindinės koncepcijos:

  • Coroutines (Korutinos): Specialios funkcijos, kurios gali laikinai sustoti ir vėl tęsti vykdymą. Jie deklaruojamos naudojant async def.
  • Event Loop (Įvykių ciklas): Pagrindinis orkestratorius, kuris valdo korutinų vykdymą, stebi įvykius ir perjungia užduotis, kai viena jų laukia.
  • await: Raktinis žodis, kuris sustabdo korutiną iki laukiamo veiksmo pabaigos (pavyzdžiui, kitos korutinės iškvietimo ar I/O rezultatų laukimo).

Pavyzdys:

// Asinchroninės funkcijos pavyzdys
import asyncio

async def fetch_url(url):
    print(f"Pradedu įkelti: {url}")
    await asyncio.sleep(2) // Ilgos operacijos imitacija (pavyzdžiui, tinklo užklausa)
    print(f"Įkėlimas baigtas: {url}")

async def main():
    # Korutinų užduočių kūrimas
    task1 = asyncio.create_task(fetch_url("http://example.com/page1"))
    task2 = asyncio.create_task(fetch_url("http://example.com/page2"))

    # Laukiame abiejų užduočių pabaigos
    await task1
    await task2

// Vykdome įvykių ciklą
if __name__ == "__main__":
    asyncio.run(main())

Privalumai:

  • Naudingumo didinimas: Ypač I/O ribotų užduočių atveju (tinklo užklausos, failų tvarkymas).
  • Resursų efektyvesnis naudojimas: Nereikia kurti daugybės srautų ar procesų, kas sumažina išlaidas.
  • Atsparumo išlaikymas: Pagrindinis srautas nėra blokuojamas, kas svarbu interaktyvioms programoms ar serveriams.

Asinchroninis programavimas yra gerai tinkamas:

  • Tinklo serveriams (pavyzdžiui, naudojant asyncio ar FastAPI).
  • Tinklalapių analizavimui.
  • Duomenų bazių darbui.
  • Bet kokiems užduotims, susijusiems su išorinių išteklių laukimu.