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
asyncioarFastAPI). - Tinklalapių analizavimui.
- Duomenų bazių darbui.
- Bet kokiems užduotims, susijusiems su išorinių išteklių laukimu.