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:
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:
time.sleep(1)bilan uchta ketma-ket “vazifa” bajaring va umumiy vaqtni o’lchang;- xuddi shuni
async defvaasyncio.sleep(1)bilan yozing; asyncio.gather()bilan uchalasini birga ishga tushiring;- ikki usulning vaqtini solishtiring;
awaitni 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.