Python'da async — asinxron dasturlash

Odatiy kod ketma-ket bajariladi: bir amal tugamaguncha keyingisi boshlanmaydi. Lekin ba’zi amallar (internetdan javob kutish, fayl o’qish) ko’p vaqt oladi — shu paytda kutib turishdan ko’ra, boshqa ish qilgan afzal. Asinxron dasturlash shunga imkon beradi.

Sinxron va asinxron

  • Sinxron — amallar navbat bilan, biri tugagach ikkinchisi.
  • Asinxron — bir amal kutayotgan paytda boshqa amal bajariladi.

Oshpaz misoli: sinxron oshpaz choy qaynashini turib kutadi. Asinxron oshpaz choy qaynayotganda non kesadi — vaqtni behuda sarflamaydi.

async va await

Asinxron funksiya async def bilan e’lon qilinadi, kutish esa await bilan. Mustaqil .py skriptda asinxron kod asyncio.run() orqali ishga tushiriladi:

import asyncio

async def salom():
    print("Boshlandi")
    await asyncio.sleep(1)   # 1 soniya "kutadi"
    print("Tugadi")

asyncio.run(salom())

Quyidagi blokni shu yerda ishga tushirib ko’rishingiz mumkin. Farqi bitta oxirgi qatorda: asyncio.run() o’rniga to’g’ridan-to’g’ri await yozilgan. Sababi — brauzerda kod allaqachon asinxron muhitda ishlaydi, asyncio.run() esa yangi muhit yaratishga urinib xato beradi:

Python

await asyncio.sleep(1) — “shu yerda 1 soniya kut” degani, lekin bu kutish boshqa ishni bloklamaydi: shu paytda dastur boshqa asinxron vazifani bajarishi mumkin.

Qachon async kerak

Async ko’p kutish bo’lgan joyda foydali: bir vaqtda yuzlab tarmoq so’rovini yuborish, ko’p fayl bilan ishlash. Oddiy hisob-kitob uchun u kerak emas — u faqat “kutish” vaqtini tejaydi, hisoblashni tezlashtirmaydi.

Amaliy mashq

Sinxron va asinxronni solishtiring:

  1. time.sleep(1) bilan uchta ketma-ket “vazifa” bajaring va umumiy vaqtni o’lchang;
  2. xuddi shuni async def va asyncio.sleep(1) bilan yozing;
  3. asyncio.gather() bilan uchalasini birga ishga tushiring;
  4. ikki usulning vaqtini solishtiring;
  5. await ni olib tashlab ko’ring — nima qaytadi?

Nega birinchi usul uch soniya, ikkinchisi bir soniya oldi?

Qisqacha xulosa

  • Sinxron — amallar navbat bilan; asinxron — kutish paytida boshqa ish.
  • async def — asinxron funksiya; await — bloklamasdan kutish.
  • Async ko’p kutish bo’lgan joyda (tarmoq, fayl) foydali.
  • Hisoblashni tezlashtirmaydi — faqat kutish vaqtini tejaydi.
  • Ilg’or mavzu; ehtiyoj tug’ilganda o’rganiladi.

Bu bilan Python bo’limining yuqori darajali darslarining katta qismini yakunladik. Keyingi darslarda loyiha strukturasi va CLI dasturlarni ko’ramiz.

Bu dars foydali bo'ldimi?

marta ko'rildi