Sobes.tech
Middle

Kas ir asinhronā programmēšana (async)?

sobes.tech AI

Atbilde no AI

Asinhronā programmēšana — tā ir paradigma, kas ļauj vienlaikus veikt daudz uzdevumu, neapturot galveno programmas plūsmu. Tas tiek panākts ar efektīvu gaidīšanas laika izmantošanu (piemēram, ievades-izvades operācijās).

Galvenās koncepcijas:

  • Coroutines (Korutinas): Īpašas funkcijas, kas var pagaidu apturēt savu izpildi un vēlāk atsākt. Tās deklarē ar async def.
  • Event Loop (Notikumu cikls): Galvenais orķestrators, kas pārvalda korutinu izpildi, seko notikumiem un pārslēdzas starp uzdevumiem, kad viens no tiem gaida.
  • await: Atslēgvārds, kas aptur korutinu līdz gaidītās operācijas pabeigšanai (piemēram, citas korutinas izsaukums vai I/O rezultātu gaidīšana).

Piemērs:

// Asinhronās funkcijas piemērs
import asyncio

async def fetch_url(url):
    print(f"Sāku lejuplādi: {url}")
    await asyncio.sleep(2) // Ilgas operācijas imitācija (piemēram, tīkla pieprasījums)
    print(f"Lejuplāde pabeigta: {url}")

async def main():
    # Korutinu uzdevumu izveide
    task1 = asyncio.create_task(fetch_url("http://example.com/page1"))
    task2 = asyncio.create_task(fetch_url("http://example.com/page2"))

    # Gaidām abu uzdevumu pabeigšanu
    await task1
    await task2

// Izpildām notikumu ciklu
if __name__ == "__main__":
    asyncio.run(main())

Priekšrocības:

  • Ražīguma palielināšana: Īpaši I/O ierobežotu uzdevumu gadījumā (tīkla pieprasījumi, failu apstrāde).
  • Resursu efektīvāka izmantošana: Netiek veidoti daudzi pavedieni vai procesi, kas samazina izdevumus.
  • Atbilstības saglabāšana: Galvenais plūsma netiek bloķēta, kas ir svarīgi interaktīvām lietojumprogrammām vai serveriem.

Asinhroniskā programmēšana ir labi piemērota:

  • Tīmekļa serveriem (piemēram, ar asyncio vai FastAPI).
  • Tīmekļa vietņu parsēšanai.
  • Datu bāzu darbam.
  • Visu uzdevumu veikšanai, kas saistīti ar ārēju resursu gaidīšanu.