🔍 Pythonda objgraph: Memory leak va obyektlar tahlili uchun super qurol
📦 objgraph — bu Pythonda obyektlar sonini vizual va dinamik tarzda kuzatish imkonini beruvchi kutubxona. Ayniqsa, memory leak (xotiraning tozalanmasligi) muammosini aniqlashda juda foydali.
❓ Nima uchun kerak?
Ayrim holatlarda:
• list, dict, class obyektlari soni kutilganidan ortib boradi,
• GC (garbage collector) ularni tozalamaydi,
• Xotira to‘ladi va dastur sekinlashadi yoki “freeze” bo‘ladi.
🔎 objgraph bu obyektlar qaerdan kelayotganini ko‘rsatib beradi!
🚀 O‘rnatish:
✅ Asosiy imkoniyatlar
1. Eng ko‘p nusxadagi obyektlar ro‘yxati:
🧾 Natija (masalan):
🔎 Kim bunchalik ko‘p dict ishlatmoqda? Endi aniqlaymiz.
2. Maxsus klassdan yaratilgan obyektlar soni:
📌 Bu orqali siz MyCustomClass dan nechta obyekt hali ham xotirada turganini bilasiz.
3. Obyektlar orasidagi bog‘lanishlar:
🧠 Bu obyektga kim havola (reference) qilayotganini grafik tarzda ko‘rsatadi.
💡 Foydali: memory leakga sabab bo‘layotgan parent obyektni topish mumkin.
4. Oldingi snapshot bilan taqqoslash:
🔁 Bu sizga obyektlar qaysi joyda ortib borayotganini ko‘rsatadi — har bir ishga tushirishdan so‘ng farqni ko‘rishingiz mumkin.
🔬 Real holat: Memory leakni aniqlash
📸 leak.png faylida Leaky obyektlar qayerdan kelayotganini ko‘rasiz!
📌 Qisqa xulosa:
✅ objgraph sizga:
• Obyektlar sonini tahlil qilish,
• Memory leak sabablari topish,
• Vizual grafiklar olish,
• Profiling vaqtida real ko‘makchi bo‘la oladi.
📦 objgraph — bu Pythonda obyektlar sonini vizual va dinamik tarzda kuzatish imkonini beruvchi kutubxona. Ayniqsa, memory leak (xotiraning tozalanmasligi) muammosini aniqlashda juda foydali.
❓ Nima uchun kerak?
Ayrim holatlarda:
• list, dict, class obyektlari soni kutilganidan ortib boradi,
• GC (garbage collector) ularni tozalamaydi,
• Xotira to‘ladi va dastur sekinlashadi yoki “freeze” bo‘ladi.
🔎 objgraph bu obyektlar qaerdan kelayotganini ko‘rsatib beradi!
🚀 O‘rnatish:
pip install objgraph
✅ Asosiy imkoniyatlar
1. Eng ko‘p nusxadagi obyektlar ro‘yxati:
import objgraph
objgraph.show_most_common_types()
🧾 Natija (masalan):
dict 1205
function 512
tuple 433
list 310
🔎 Kim bunchalik ko‘p dict ishlatmoqda? Endi aniqlaymiz.
2. Maxsus klassdan yaratilgan obyektlar soni:
objgraph.count('MyCustomClass')
📌 Bu orqali siz MyCustomClass dan nechta obyekt hali ham xotirada turganini bilasiz.
3. Obyektlar orasidagi bog‘lanishlar:
objgraph.show_backrefs([my_obj], filename='backrefs.png')
🧠 Bu obyektga kim havola (reference) qilayotganini grafik tarzda ko‘rsatadi.
💡 Foydali: memory leakga sabab bo‘layotgan parent obyektni topish mumkin.
4. Oldingi snapshot bilan taqqoslash:
import objgraph
objgraph.show_growth()
🔁 Bu sizga obyektlar qaysi joyda ortib borayotganini ko‘rsatadi — har bir ishga tushirishdan so‘ng farqni ko‘rishingiz mumkin.
🔬 Real holat: Memory leakni aniqlash
import objgraph
class Leaky:
pass
objs = []
def make_leak():
for _ in range(100):
objs.append(Leaky())
make_leak()
objgraph.show_most_common_types()
objgraph.show_backrefs([objs[-1]], filename='leak.png')
📸 leak.png faylida Leaky obyektlar qayerdan kelayotganini ko‘rasiz!
📌 Qisqa xulosa:
✅ objgraph sizga:
• Obyektlar sonini tahlil qilish,
• Memory leak sabablari topish,
• Vizual grafiklar olish,
• Profiling vaqtida real ko‘makchi bo‘la oladi.
Metaclass (Metasinflar)
Metaclass nima?
• Metaclass — bu klasslarni yaratadigan klass.
• Klasslar obyekt yaratadi, metaklass esa klassni yaratadi.
Oddiy misol:
Natija:
Foydali joylari:
• Klass yaratilishida avtomatik tekshiruvlar yoki o‘zgartirishlar kiritish.
• ORM tizimlarida (SQLAlchemy, Django Models) foydalaniladi.
Batafsil komentariyada 👇
Metaclass nima?
• Metaclass — bu klasslarni yaratadigan klass.
• Klasslar obyekt yaratadi, metaklass esa klassni yaratadi.
Oddiy misol:
class MyMeta(type):
def __new__(cls, name, bases, dct):
print(f"Klass yaratilmoqda: {name}")
return super().__new__(cls, name, bases, dct)
class MyClass(metaclass=MyMeta):
pass
Natija:
Klass yaratilmoqda: MyClass
Foydali joylari:
• Klass yaratilishida avtomatik tekshiruvlar yoki o‘zgartirishlar kiritish.
• ORM tizimlarida (SQLAlchemy, Django Models) foydalaniladi.
Batafsil komentariyada 👇
Klass registry — barcha subclasslarni ro‘yxatga olish
Tasavvur qiling siz ishlatgan hamma klasslaringiz ro'yxatini yaratmoqchisiz va buning imkoni bor, metaclass yordamida:
Bu yondashuv plagin tizimlari yoki avtomatik yuklovchilar uchun ishlatiladi.
Tasavvur qiling siz ishlatgan hamma klasslaringiz ro'yxatini yaratmoqchisiz va buning imkoni bor, metaclass yordamida:
class RegistryMeta(type):
registry = []
def __new__(cls, name, bases, attrs):
new_cls = super().__new__(cls, name, bases, attrs)
cls.registry.append(new_cls)
return new_cls
class Base(metaclass=RegistryMeta):
pass
class A(Base): pass
class B(Base): pass
print(RegistryMeta.registry) # [<class '__main__.Base'>, <class '__main__.A'>, <class '__main__.B'>]
Bu yondashuv plagin tizimlari yoki avtomatik yuklovchilar uchun ishlatiladi.
Klass atributlarini tekshirish
Tasavvur qiling siz qandaydir o'xshash klasslar yaratmoqchisiz, va bu klasslarda qaysidir atribut (masalan: my_attr) ishlatilishi majburiy, lekin ba'zida bu atributni ishlatish esingizdan chiqib qoladi va dasturingizda kodning to shu joyi ishlamaguncha xatolik chiqmaydi.
Balki test jarayonida bu joyini sinab ko'rmassiz va project topshirganingizdan keyin chiqar bu muammo. Sizga yechim kerakmi?
Yechim (metaclass orqali)
Bu yerda har qanday klass yaratishda metaclass my_attr bor-yo‘qligini tekshiradi. Juda foydali, ayniqsa yirik frameworklar uchun.
Tasavvur qiling siz qandaydir o'xshash klasslar yaratmoqchisiz, va bu klasslarda qaysidir atribut (masalan: my_attr) ishlatilishi majburiy, lekin ba'zida bu atributni ishlatish esingizdan chiqib qoladi va dasturingizda kodning to shu joyi ishlamaguncha xatolik chiqmaydi.
Balki test jarayonida bu joyini sinab ko'rmassiz va project topshirganingizdan keyin chiqar bu muammo. Sizga yechim kerakmi?
Yechim (metaclass orqali)
class ValidateMeta(type):
def __new__(cls, name, bases, attrs):
if 'my_attr' not in attrs:
raise TypeError(f"{name} klassida 'my_attr' bo'lishi shart!")
return super().__new__(cls, name, bases, attrs)
class ValidClass(metaclass=ValidateMeta):
my_attr = 123 # OK
class InvalidClass(metaclass=ValidateMeta):
pass # ❌ Error: 'my_attr' yo'q
Bu yerda har qanday klass yaratishda metaclass my_attr bor-yo‘qligini tekshiradi. Juda foydali, ayniqsa yirik frameworklar uchun.
🔍 mypy nima?
mypy — bu Python dasturlari uchun static type checker, ya’ni:
• Kodga tiplar yozilgan bo‘lsa, ularni avvaldan tekshiradi.
• Python kutilgan tipga mos kelmaydigan qiymatlar bilan ishlasa — mypy bu haqida xatolikni bajarilmasdan oldin bildiradi.
🧱 Asosiy g‘oya
Python o‘zi:
• Tiplarni dinamik tekshiradi (faqat kod bajarayotganda),
• Lekin bu xatolikni kech bildiradi.
• Siz yozgan typing belgilari orqali, kodni tahlil qilib, int o‘rniga str berilganini oldindan sezadi.
✅ Qanday ishlaydi?
Kod yozasiz:
Noto‘g‘ri chaqirasiz:
Python bajarsa — bu TypeError beradi, lekin kodning xatolik beradigan joyi ishlagandan keyin.
mypy bilan tekshirsangiz:
U quyidagi xatoni ko‘rsatadi:
⚙️ mypyni qanday o‘rnatish?
Terminalda:
mypy — bu Python dasturlari uchun static type checker, ya’ni:
• Kodga tiplar yozilgan bo‘lsa, ularni avvaldan tekshiradi.
• Python kutilgan tipga mos kelmaydigan qiymatlar bilan ishlasa — mypy bu haqida xatolikni bajarilmasdan oldin bildiradi.
🧱 Asosiy g‘oya
Python o‘zi:
• Tiplarni dinamik tekshiradi (faqat kod bajarayotganda),
• Lekin bu xatolikni kech bildiradi.
mypy esa:• Siz yozgan typing belgilari orqali, kodni tahlil qilib, int o‘rniga str berilganini oldindan sezadi.
✅ Qanday ishlaydi?
Kod yozasiz:
def greet(name: str) -> str:
return "Salom, " + name
Noto‘g‘ri chaqirasiz:
greet(123)
Python bajarsa — bu TypeError beradi, lekin kodning xatolik beradigan joyi ishlagandan keyin.
mypy bilan tekshirsangiz:
mypy file.py
U quyidagi xatoni ko‘rsatadi:
error: Argument 1 to "greet" has incompatible type "int"; expected "str"
⚙️ mypyni qanday o‘rnatish?
Terminalda:
pip install mypy
❤1
🎓 Ilmiy grafiklar uchun mukammal yechim – SciencePlots!
Pythonda grafiklar chizasizmi? Ularni ilmiy maqolalar yoki taqdimotlarga tayyor holatga keltirishni istaysizmi?
📊 SciencePlots — bu Matplotlib uchun ajoyib style kutubxonasi bo‘lib, grafiklaringizni professional ko‘rinishga keltiradi!
👨🔬 Foydali kimlar uchun?
• Olimlar
• Muhandislar
• Talabalar
• Ilmiy ish qilayotgan dasturchilar
🔗 Kutubxona: scienceplots
👉 Grafiklaringiz endi nafaqat foydali, balki chiroyli ham bo‘ladi!
Pythonda grafiklar chizasizmi? Ularni ilmiy maqolalar yoki taqdimotlarga tayyor holatga keltirishni istaysizmi?
📊 SciencePlots — bu Matplotlib uchun ajoyib style kutubxonasi bo‘lib, grafiklaringizni professional ko‘rinishga keltiradi!
👨🔬 Foydali kimlar uchun?
• Olimlar
• Muhandislar
• Talabalar
• Ilmiy ish qilayotgan dasturchilar
🔗 Kutubxona: scienceplots
👉 Grafiklaringiz endi nafaqat foydali, balki chiroyli ham bo‘ladi!
👍1
🧠🐍 Pythonda funksiyani avtomatik tezlashtirish – lru_cache bilan!
Ayniqsa hisob-kitobli, rekursiv, yoki ko‘p chaqiriladigan funksiyalaringiz bormi?
Unda siz uchun yechim:
⚡️ @lru_cache — natijani eslab qoladi, hisoblashni takrorlamaydi!
✅ Afzalliklari:
• Funksiya tez ishlaydi
• Hisoblash resursini tejaydi
• Kodni oddiy dekorator bilan optimallashtirasiz
📊 Statistikani ham ko‘rish mumkin:
🎯 Natija:
• hits: necha marta keshdan foydalandi
• misses: necha marta hisoblashga to‘g‘ri keldi
✅ lru_cache — bu faqat dekorator qo‘shish orqali katta yutuq!
Ayniqsa hisob-kitobli, rekursiv, yoki ko‘p chaqiriladigan funksiyalaringiz bormi?
Unda siz uchun yechim:
⚡️ @lru_cache — natijani eslab qoladi, hisoblashni takrorlamaydi!
✅ Afzalliklari:
• Funksiya tez ishlaydi
• Hisoblash resursini tejaydi
• Kodni oddiy dekorator bilan optimallashtirasiz
📊 Statistikani ham ko‘rish mumkin:
print(kvadrat.cache_info())
🎯 Natija:
• hits: necha marta keshdan foydalandi
• misses: necha marta hisoblashga to‘g‘ri keldi
✅ lru_cache — bu faqat dekorator qo‘shish orqali katta yutuq!
Media is too big
VIEW IN TELEGRAM
Stelvio v0.3.0 allaqachon shu yerda!
Python-ilovani AWSda joylashtirishning eng oddiy usuli.
Faqat Python.
YAML yo‘q. JSON yo‘q. AWS Console’da sichqoncha bosish yo‘q.
✓ Oldindan sozlashsiz CLI
✓ Muhitlarni qo‘llab-quvvatlash
Qarang, API ni bo‘sh papkadan qanday ishga tushirish mumkin — 60 soniyadan kam vaqt ichida.
dokumentatsiyasi: https://docs.stelvio.dev
GitHub: https://github.com/michal-stlv/stelvio/
Python-ilovani AWSda joylashtirishning eng oddiy usuli.
Faqat Python.
YAML yo‘q. JSON yo‘q. AWS Console’da sichqoncha bosish yo‘q.
✓ Oldindan sozlashsiz CLI
✓ Muhitlarni qo‘llab-quvvatlash
Qarang, API ni bo‘sh papkadan qanday ishga tushirish mumkin — 60 soniyadan kam vaqt ichida.
dokumentatsiyasi: https://docs.stelvio.dev
GitHub: https://github.com/michal-stlv/stelvio/
🐍 Pythonda kodni chiroyli saqlash siri: singledispatch!
Biror funksiyani argument turiga qarab har xil ishlatmoqchimisiz?
Ko‘pchilik if isinstance(...) bilan kodni ko'paytirib yuboradi.
🚫 Bu ortiqcha.
✅ Elegant yechim: functools.singledispatch
🎯 Nima beradi?
✅ Polimorfizm: bir funksiya — turli xulq
✅ if-elif zanjirlari o‘rniga chiroyli struktura
✅ Kengaytirish va testlash osonroq
🔧 singledispatch — ayniqsa, katta loyihalarda kodni modularlashtirish va o‘qiluvchanlikni saqlash uchun ajoyib vosita!
functools.singledispatch funksiyasi Python 3.4 va undan keyingi versiyalarda mavjud ✅
Biror funksiyani argument turiga qarab har xil ishlatmoqchimisiz?
Ko‘pchilik if isinstance(...) bilan kodni ko'paytirib yuboradi.
🚫 Bu ortiqcha.
✅ Elegant yechim: functools.singledispatch
🎯 Nima beradi?
✅ Polimorfizm: bir funksiya — turli xulq
✅ if-elif zanjirlari o‘rniga chiroyli struktura
✅ Kengaytirish va testlash osonroq
🔧 singledispatch — ayniqsa, katta loyihalarda kodni modularlashtirish va o‘qiluvchanlikni saqlash uchun ajoyib vosita!
functools.singledispatch funksiyasi Python 3.4 va undan keyingi versiyalarda mavjud ✅
🧠🐍 Pythonda funksiyani qisqartirish siri — partial bilan!
Ko‘p ishlatiladigan funksiyaga doim bir xil argument berasizmi?
Endi har gal yozish shart emas!
⚡️ functools.partial yordamida tayyor "variant" funksiyalar yasang!
📌Rasmda keltirilgan kodda ham endi meva(soni) deb chaqirsangiz bo‘ldi — narx avtomatik hisoblanadi!
📍 Qayerda foydali?
• GUI tugmalar uchun callback
• map, filter kabi funksiya chaqiruvlarida
• Kutilayotgan funksiyaning argumentlarini moslashtirishda
💬 partial — bu Pythondagi “tayyor sozlama” vositasi. Kod qisqaradi, soddalashadi va tushunarli bo‘ladi!
Ko‘p ishlatiladigan funksiyaga doim bir xil argument berasizmi?
Endi har gal yozish shart emas!
⚡️ functools.partial yordamida tayyor "variant" funksiyalar yasang!
📌Rasmda keltirilgan kodda ham endi meva(soni) deb chaqirsangiz bo‘ldi — narx avtomatik hisoblanadi!
📍 Qayerda foydali?
• GUI tugmalar uchun callback
• map, filter kabi funksiya chaqiruvlarida
• Kutilayotgan funksiyaning argumentlarini moslashtirishda
💬 partial — bu Pythondagi “tayyor sozlama” vositasi. Kod qisqaradi, soddalashadi va tushunarli bo‘ladi!
🐍🎭 Python’da dekorator yozyapsizmi? @wraps-siz bo‘lmang!
Ko‘pchilik dekorator yozganda bir xatoga yo‘l qo‘yadi:
Ular funksiya metadatasini yo‘qotib qo‘yadi — nomi, hujjati, parametrlari yo‘qoladi!
🎯 Yechim: functools.wraps
✅ Asl funksiyaning:
• Nomi (name)
• Hujjati (doc)
• Annotatsiyalari
• Modul nomi
hammasini saqlab qoladi.
💡 wraps bo‘lmasa — hello funksiyangiz nomi ichki bo‘lib qoladi va help() yoki logging ishlamaydi.
⚠️ Dekorator yozsangiz, @wraps har doim yozing. Bu yaxshi amaliyot (best practice)!
Ko‘pchilik dekorator yozganda bir xatoga yo‘l qo‘yadi:
Ular funksiya metadatasini yo‘qotib qo‘yadi — nomi, hujjati, parametrlari yo‘qoladi!
🎯 Yechim: functools.wraps
✅ Asl funksiyaning:
• Nomi (name)
• Hujjati (doc)
• Annotatsiyalari
• Modul nomi
hammasini saqlab qoladi.
💡 wraps bo‘lmasa — hello funksiyangiz nomi ichki bo‘lib qoladi va help() yoki logging ishlamaydi.
⚠️ Dekorator yozsangiz, @wraps har doim yozing. Bu yaxshi amaliyot (best practice)!
Forwarded from Katta maqsad sari uzoq safar
This media is not supported in your browser
VIEW IN TELEGRAM
🧠 Python Descriptors – Mukammal Tushuncha
📌 Descriptor – bu __get__, __set__, yoki __delete__ metodlaridan birini yoki bir nechtasini implement qilgan klassdir. U orqali siz klass atributlariga kirishni nazorat qilishingiz mumkin.
📘 Qisqacha ta’rif:
Ushbu metodlar:
• __get__ → atributni o‘qishda,
• __set__ → qiymat yozishda,
• __delete__ → atributni o‘chirishda chaqiriladi.
🔧 Amaliy misol: Atributga faqat musbat son yozish
🔥 Qachon descriptor ishlatamiz?
• Validatsiya qilish (masalan, PositiveNumber)
• Read-only atributlar yaratish
• Lazy-loading (kerak bo‘lganda yuklash)
• Type-checking, logger, audit trail, va boshqalar
🚨 Ehtiyot bo‘ling: Memory leak
Agar descriptorlar noto‘g‘ri implement qilinsa (self.valueni barcha obyektlar uchun umumiy saqlasa), bu memory leak (xotira sizib chiqishi) keltirib chiqarishi mumkin. Har bir instansiya uchun alohida instance.__dict__da saqlash eng yaxshi yondashuv.
📌 Yakuniy xulosa
✅ Descriptor – kuchli, lekin nazoratli foydalanish kerak bo‘lgan vosita. U orqali klass atributlariga kirish ustidan to‘liq boshqaruv olasiz.
qo'shimcha ma'lumot komentariyada👇
📌 Descriptor – bu __get__, __set__, yoki __delete__ metodlaridan birini yoki bir nechtasini implement qilgan klassdir. U orqali siz klass atributlariga kirishni nazorat qilishingiz mumkin.
📘 Qisqacha ta’rif:
class Descriptor:
def get(self, instance, owner):
...
def set(self, instance, value):
...
def delete(self, instance):
...
Ushbu metodlar:
• __get__ → atributni o‘qishda,
• __set__ → qiymat yozishda,
• __delete__ → atributni o‘chirishda chaqiriladi.
🔧 Amaliy misol: Atributga faqat musbat son yozish
class PositiveNumber:
def init(self, initial=0):
self.value = initial
def get(self, instance, owner):
return self.value
def set(self, instance, value):
if value < 0:
raise ValueError("Faqat musbat son bo'lishi mumkin.")
self.value = value
def delete(self, instance):
del self.value
class MyClass:
age = PositiveNumber()
obj = MyClass()
obj.age = 25 # ✅ OK
obj.age = -5 # ❌ ValueError
🔥 Qachon descriptor ishlatamiz?
• Validatsiya qilish (masalan, PositiveNumber)
• Read-only atributlar yaratish
• Lazy-loading (kerak bo‘lganda yuklash)
• Type-checking, logger, audit trail, va boshqalar
🚨 Ehtiyot bo‘ling: Memory leak
Agar descriptorlar noto‘g‘ri implement qilinsa (self.valueni barcha obyektlar uchun umumiy saqlasa), bu memory leak (xotira sizib chiqishi) keltirib chiqarishi mumkin. Har bir instansiya uchun alohida instance.__dict__da saqlash eng yaxshi yondashuv.
📌 Yakuniy xulosa
✅ Descriptor – kuchli, lekin nazoratli foydalanish kerak bo‘lgan vosita. U orqali klass atributlariga kirish ustidan to‘liq boshqaruv olasiz.
qo'shimcha ma'lumot komentariyada👇
Exceptions (Istisnolar) nima?
Exception – dastur bajarilishi vaqtida yuzaga keladigan xatolik bo‘lib, dasturning ishini to‘xtatadi yoki qaysidir qismi noto'g'ri ishlashiga olib keladi.
Masalan:
Bu yerda b = 0, shuning uchun bo‘lish mumkin emas va ZeroDivisionError xatoligi yuz beradi.
Exception – dastur bajarilishi vaqtida yuzaga keladigan xatolik bo‘lib, dasturning ishini to‘xtatadi yoki qaysidir qismi noto'g'ri ishlashiga olib keladi.
Masalan:
a = 10
b = 0
c = a / b # ZeroDivisionError: division by zero
Bu yerda b = 0, shuning uchun bo‘lish mumkin emas va ZeroDivisionError xatoligi yuz beradi.
Exception Handling (Xatolarni ushlash)
Pythonda try, except, finally, va else bloklari yordamida xatoliklar bilan ishlash, xatolik yuz berganda nimalar qilishni beglilash mumkin.
Misol:
Pythonda try, except, finally, va else bloklari yordamida xatoliklar bilan ishlash, xatolik yuz berganda nimalar qilishni beglilash mumkin.
Misol:
try:
number = int(input("Son kiriting: "))
print(10 / number)
except ZeroDivisionError:
print("0 ga bo‘lish mumkin emas!")
except ValueError:
print("Faqat son kiriting!")
finally:
print("Dasturning bu qismi har doim bajariladi.")
Custom Exceptions (Maxsus Istisnolar)
Ba'zida biz qilayotgan dastur uchun, bizni holatimizga mos xatoliklar kerak bo‘ladi va biz uni o'zimiz yasashimiz mumkin.
Buning uchun Exception klassidan meros olib yangi klass yaratamiz.
Ba'zida biz qilayotgan dastur uchun, bizni holatimizga mos xatoliklar kerak bo‘ladi va biz uni o'zimiz yasashimiz mumkin.
Buning uchun Exception klassidan meros olib yangi klass yaratamiz.
class MyCustomError(Exception):
def init(self, message):
self.message = message
super().init(self.message)
def tekshir(yosh):
if yosh < 18:
raise MyCustomError("Yosh 18 dan kichik bo'lishi mumkin emas!")
else:
print("Kirish ruxsat etildi.")
try:
tekshir(16)
except MyCustomError as e:
print(f"Xatolik: {e}")
🔹 Cirq — Googlening kvant hisoblash kutubxonasi
Cirq — bu Google tomonidan ishlab chiqilgan kutubxona bo‘lib, kvant hisoblash sohasida ishlash uchun mo‘ljallangan. U Noisy Intermediate Scale Quantum (NISQ) tizimlari uchun kvant zanjirlarini (circuit) yaratish, tahrirlash va ishga tushirish imkonini beradi.
📌 NISQ — bu 50–100 kubitga ega bo‘lgan va yaqin yillarda amalda foydalanilishi mumkin bo‘lgan kvant kompyuterlar sinfi.
Cirq yordamida siz:
• Kvant zanjirlarini aniqlashingiz va ularni klassik kompyuterlarda simulyatsiya qilishingiz;
• Tayyorlangan zanjirlarni haqiqiy kvant apparatlarida ishga tushirishingiz mumkin.
🔍 Dastur natijalari odatda gistorgramma ko‘rinishida bo‘ladi:
• Kalitlar — o‘lchovning mumkin bo‘lgan natijalari;
• Qiymatlar — ushbu natija nechta marta kuzatilganini bildiradi.
💡 Kvant hisoblash — kelajak texnologiyalaridan biri. Cirq bilan esa bu kelajakni hozirdan sinab ko‘rish mumkin! 🚀
Cirq — bu Google tomonidan ishlab chiqilgan kutubxona bo‘lib, kvant hisoblash sohasida ishlash uchun mo‘ljallangan. U Noisy Intermediate Scale Quantum (NISQ) tizimlari uchun kvant zanjirlarini (circuit) yaratish, tahrirlash va ishga tushirish imkonini beradi.
📌 NISQ — bu 50–100 kubitga ega bo‘lgan va yaqin yillarda amalda foydalanilishi mumkin bo‘lgan kvant kompyuterlar sinfi.
Cirq yordamida siz:
• Kvant zanjirlarini aniqlashingiz va ularni klassik kompyuterlarda simulyatsiya qilishingiz;
• Tayyorlangan zanjirlarni haqiqiy kvant apparatlarida ishga tushirishingiz mumkin.
🔍 Dastur natijalari odatda gistorgramma ko‘rinishida bo‘ladi:
• Kalitlar — o‘lchovning mumkin bo‘lgan natijalari;
• Qiymatlar — ushbu natija nechta marta kuzatilganini bildiradi.
💡 Kvant hisoblash — kelajak texnologiyalaridan biri. Cirq bilan esa bu kelajakni hozirdan sinab ko‘rish mumkin! 🚀
💻 Python + WebTexnologiyalar = Pywebview
Siz Python yordamida desktop ilovalar yaratmoqchimisiz, lekin GUI bilan bosh qotirmoqchi emassiz? 🤔
Pywebview – bu kichik, ammo qudratli kutubxona:
• HTML, CSS va JavaScript yordamida interfeys yaratish mumkin
• OS-ning ichki web-dvigatelidan foydalanadi (Windows, macOS, Linux)
• Oddiy web-sahifani desktop oynasida ochish oson
Yuqoridagi kodning natijasida (paydo bo'ladigan oyna komentda 👇):
✅ Oyna paydo bo‘ladi
✅ Google sahifasi ochiladi
Foydali jihatlar:
• Web-ilovalarni desktopga oson ko‘chirish
• Python va JS ni integratsiya qilish
• Lokal HTML yoki onlayn sahifalarni ishlatish
Yana bir foydali tomoni:
• Siz brauzerda iz qoldirishni xoxlamaysiz!
Siz Python yordamida desktop ilovalar yaratmoqchimisiz, lekin GUI bilan bosh qotirmoqchi emassiz? 🤔
Pywebview – bu kichik, ammo qudratli kutubxona:
• HTML, CSS va JavaScript yordamida interfeys yaratish mumkin
• OS-ning ichki web-dvigatelidan foydalanadi (Windows, macOS, Linux)
• Oddiy web-sahifani desktop oynasida ochish oson
Yuqoridagi kodning natijasida (paydo bo'ladigan oyna komentda 👇):
✅ Oyna paydo bo‘ladi
✅ Google sahifasi ochiladi
Foydali jihatlar:
• Web-ilovalarni desktopga oson ko‘chirish
• Python va JS ni integratsiya qilish
• Lokal HTML yoki onlayn sahifalarni ishlatish
Yana bir foydali tomoni:
• Siz brauzerda iz qoldirishni xoxlamaysiz!
👍1
🚀 Python GILsiz: Ko‘p oqimlilikning yangi davri
Python 3.13 da tajriba sifatida Global Interpreter Lock (GIL) ni o‘chirib qo‘yish imkoniyati paydo bo‘ldi.
GIL — Pythonning yillar davomida haqiqiy ko‘p oqimli ishlashini cheklab kelgan mexanizmi edi.
🔬 Endi odatiy va free-threaded (GILsiz) versiyalarni solishtirish mumkin.
CPU bilan bog‘liq og‘ir vazifalarda 4 ta oqim ishlatilganda 3-4 baravar tezlik oshishi kuzatilgan.
⚠️ Lekin buning narxi bor:
• Xotira boshqaruvi murakkablashadi
• Yangi garbage collector tizimi kerak bo‘ladi
• Ba’zi obyektlar “o‘lmas” bo‘lib qoladi
📅 Hozircha free-threaded Python ixtiyoriy, lekin Python 3.14 dan boshlab standart bo‘lishi mumkin.
Asosiy savol — hamjamiyat va kutubxonalar qanchalik tez moslashadi?
Python 3.13 da tajriba sifatida Global Interpreter Lock (GIL) ni o‘chirib qo‘yish imkoniyati paydo bo‘ldi.
GIL — Pythonning yillar davomida haqiqiy ko‘p oqimli ishlashini cheklab kelgan mexanizmi edi.
🔬 Endi odatiy va free-threaded (GILsiz) versiyalarni solishtirish mumkin.
CPU bilan bog‘liq og‘ir vazifalarda 4 ta oqim ishlatilganda 3-4 baravar tezlik oshishi kuzatilgan.
⚠️ Lekin buning narxi bor:
• Xotira boshqaruvi murakkablashadi
• Yangi garbage collector tizimi kerak bo‘ladi
• Ba’zi obyektlar “o‘lmas” bo‘lib qoladi
📅 Hozircha free-threaded Python ixtiyoriy, lekin Python 3.14 dan boshlab standart bo‘lishi mumkin.
Asosiy savol — hamjamiyat va kutubxonalar qanchalik tez moslashadi?