Python
3) Asinxron kod yozish: asyncio bilan Python
Asinxron dasturlashda vazifalar parallel ravishda bajariladi va kontekstlar o‘rtasida fair scheduling amalga oshiriladi. asyncio kutubxonasi yordamida event loop quramiz, async funksiyalarni def o‘rniga async def bilan aniqlaymiz hamda await orqali uzluksiz kutishni boshqaramiz. Yaxshi amaliyot - IO yoki tarmoqli ishlar uchun asinxron namunalarni tanlash, bloklanadigan operatsiyalarni ko‘p kutish o‘rniga boshqa vazifalarni bajarishga yo‘l qo‘yish.
Mana oddiy misol: ikkita vazifa parallel ravishda bajarilishi uchun, ikki API so‘rovini simulyatsiya qilamiz va ularni asyncio.gather yordamida birga yig‘amiz. Bu nafaqat vaqtni tejaydi, balki resurslardan samarali foydalanishni ta’minlaydi. Dastur tuzilishi oddiy, lekin real dunyoda fayl o‘qish/yuklash, tarmoqli so‘rovlar kabi operasiyalarni yengillashtiradi.
import asyncio
import random
async def fetch_data(i):
dur = random.uniform(0.5, 1.5)
await asyncio.sleep(dur) # IO operatsiyasi o‘xshash kutish
return f"data_{i} (waited {dur:.2f}s)"
async def main():
tasks = [fetch_data(i) for i in range(1, 4)]
results = await asyncio.gather(*tasks)
print(results)
if __name__ == "__main__":
asyncio.run(main())
['data_1 (waited 0.72s)', 'data_2 (waited 1.03s)', 'data_3 (waited 0.89s)']
Asinxron dasturlashda eng ko‘p uchraydigan xatolar: bloklanadigan kodlarni to‘g‘ri ko‘rsatmaslik, await ni unutish, event loopni noto‘g‘ri boshqarish. Siz uchun eng qiyin bo‘lgan asinxron masala nima?
16 ·