🚀Threading, Asyncio yoki Celery?, yoxud biz kutmaydigan vazifalar...

🚀Threading, Asyncio yoki Celery?, yoxud biz kutmaydigan vazifalar...

Murodali Narzullaev

Threading, Asyncio yoki Celery'lar bizga vazifalarni Assinxron ishlatishda yordam beradi. Birinchi navbatda Assinxron dasturlash haqida tushunib olishimiz kerak, Assinxron dasturlashni tushunish uchun avval Sinxron dasturlar qanaqa ishlashini ko'ramiz.

Sinxron dasturlar bu - uzluksiz ketma-ketlikda ishlaydigan dasturlar hisoblanadi, Tasavvur qiling oshpazsiz, Sho'rva tayyorlayapsiz, birinchi navbatda siz masalliqlarni olib kelasiz, go'shtni qaynatishga qo'yasiz, go'sht qaynagandan keyin kartoshgani tozalaysiz va qozonga solasiz, sholg'omni tozalaysiz va qozonga solasiz, sabzini tozalaysiz va qozonga solasiz. Korinishidan normal ko'rinishi mumkin lekin siz buyerda vaqt koproq vaqt yo'qotayapsiz.

Qayerda vaqt yo'qottik?

Go'sht qaynashini taxmiman yarim soat kuttik, keyin masalliqlarimizni birma bir tozalab qozonga soldik, Lekin buyerda go'sht qaynashiga ketgan vaqtimizda masalliqlarni tozalab qoyishimiz mumkin edi, Sinxron dasturlash esa bunga imkon bermaydi ya'ni, bir sinxron dasturlash bilan bir vaqtda faqat bitta ish qila olamiz. Sho'rvani qaynatishga qo'yamiz toki qaynamaguncha uni kutamiz. Sho'rva qaynadi degan javobni olganimzidan keyin boshqa vazifalarni bararishni boshlaymiz.

Vaqt yo'qotmasligimiz uchun nima qilishimiz kerak?

Asinxron dasturlash - vazifalar bir vaqtning o‘zida bajariladi. Dastur bir vazifa tugashini kutmasdan boshqa vazifalarni bajara oladi. Ya'ni endi biz sho'rvada go'sht qaynaguncha qolgan masalliqlarni tozalab qogozga sola olamiz. Vaqtdan ham kuchdan ham tejab qoldik. Asinxron dasturlash orqali dasturlarni tezroq va resurslarni samarali ishlatadigan qilib yaratsak bo'laldi.

🤔Qaysi birni tanlash kerak?


⏳ Sinxron dasturlash:

Afzalliklari:

Soddalik va tushunarli kod – Vazifalar ketma-ket bajarilgani uchun kodni tushunish oson.

Xatolarni topish oson – Mantiqiy ketma-ketlik tufayli debugging osonroq.

Kutbxonalar bilan ishlataish – Ko‘plab kutubxonalar sinxron usulda yozilgan va yaxshi qo‘llab-quvvatlanadi.

Kamchiliklari:

Sekin ishlash – Bir vazifa tugamaguncha keyingisi boshlanmaydi, vaqtni ko‘p sarflaydi.

Kutish – Bitta vazifa kutayotgan paytda boshqa vazifalar ham to‘xtab turadi.

Kam samaradorlik – CPU va resurslardan to‘liq foydalana olmaydi.


Asinxron dasturlash:

Afzalliklari:

Tezkor ishlash – Bir vaqtning o‘zida bir nechta vazifalarni bajaradi, kutish vaqtida boshqa ishlarni qiladi.

Resurslarni samarali ishlatadi – CPU va tarmoq resurslarini to‘liq ishlatadi.

Yuqori samaradorlik – Ko‘p foydalanuvchi bir vaqtning o‘zida murojaat qilganda ham yuklanish kamroq bo‘ladi.

Kamchiliklari:

Murakkablik – Kodni tushunish va yozish qiyinroq (async, await, event loop tushunchalarini bilish kerak).

Xatolarni tuzatish qiyin – Vazifalar bir vaqtda ishlashi sababli debugging murakkablashadi.

Kutbxonalar bilan ishlataish – Barcha kutubxonalar asinxron usulni qo‘llab-quvvatlamasligi mumkin.

Oddiy va kichik loyihalarda, ketma-ket vazifalar bajariladigan bolsa Sinxron dastulash yaxshi yechim, lekin  Katta hajmdagi ma'lumotlar bilan ishlashda, ko‘p foydalanuvchi bir vaqtning o‘zida murojaat qilganda (masalan, web serverlar) Assinxron dasturlash afzalroq.


Biz yuqorida aytgan Threading, Asyncio yoki Celery'lar barchasi assinxron ishlaydi. Endi qaysi biri ?)

Bularning barchasining ustunliklari va kamchiliklari mavjud, dasturimizda orqa fonda ishlaydigan topshiriqlardan kelib chiqib bittasini tanlashimiz mumkin.

Threading qanday ishlaydi?

Threading bu - Python'ning standart kutbxonasi bo'lib, u vazifalarni oqimlarga bo'lib bajaradi. Har bir thread(oqim) dasturda mustaqil ishlaydi, ammo bir xil xotira maydonini ulashadi.


☕️Keling Theading bilan nonushta tayyorlaymiz

Tasavvur qiling, siz kofe tayyorlayapsiz, tuxum qaynatyapsiz, va muzlatkichdan yog‘ olayapsiz.

Bu ishlarni qanday ketma-ketlikda bajarishingiz mumkin?

Siz bir vaqtning o‘zida bir nechta ishlarni qilasiz:

  • Kofeni damlaysiz va tuxumni qaynatish uchun gazga qo'yasiz.
  • Muzlatkichdan yog‘ olishni ham bir vaqtning o‘zida amalga oshirasiz.
  • Har bir ish alohida odam (thread) tomonidan bajariladi, lekin ularning barchasi bir oshxonada (xotira maydonida) ishlaydi.
  • Agar bitta ish (masalan, kofe qaynashi) uzoq davom etsa ham, boshqa ishlar to‘xtab qolmaydi.
⛔ Agar bir vaqtning o‘zida bir nechta odam oshxonada ishlasa, to‘qnashuv (race condition) bo‘lishi mumkin. Masalan, hamma muzlatkichdan narsa olayotganda, o‘zaro to‘qnashadi.

☕️Asyncio bilan nonushta tayyorlashga harakat qilamiz

  • Bitta odam (ya'ni, bitta jarayon) barcha ishlarni qiladi, lekin aqlli tarzda.Suv qaynayotganda to‘xtab turmaydi, shu vaqtda tuxumni qaynatish uchun gazga qo'yadi.
  • Tuxumni qaynayotganda muzlatkichdan yog‘ni olib keladi.
  • Vazifalar navbat bilan amalga oshadi, ya'ni biri kutayotgan paytda boshqasi bajariladi.
✅ Oshxonada bitta odam ishlagani uchun to‘qnashuv bo‘lmaydi.
⛔ Agar barcha ishlar bir vaqtning o‘zida bajarilishini xohlasangiz, bu usul biroz sekinroq bo‘lishi mumkin.
Django bilan ishlaganda bu usul biroz qiyinchilik olib kelishi mumkin chunki kod WSGI bilan emas balki ASGI (uvicorn, daphne) yordamida ishlatishga to'gri keladi



🚀 Celery – Eng Samarali, Professional Yondashuv.

Celery – bu fon jarayonida bajariladigan task manager. U RabbitMQ yoki Redis yordamida vazifalarni navbatda bajaradi. Siz endi hech narsa haqida qayg'urmaysiz, sizning o'rningizga bunday muammolarni Celery o'ylaydi )


🤔Qaysi usuldan foydalanay?

🔸 Kichik loyiha yoki test uchun – Threading yoki Asyncio ishlatish mumkin.

🔸 Katta hajmdagi tasklar uchun – Celery eng yaxshi tanlov!



Sizlar bilan https://t.me/murodalidev bo'ldi. Agar oxirigacha o'qigan bo'lsangiz demak yana boshqa mavzularda maqola yozishim kerak!

Report Page