Forwarded from Django darslari (Mukhammad irmatov)
Redis caching(keshlash)ni loyiha optimizatsiya qilishda o’rni beqiyos. Redis to’g’ri sozlansa, foydalanuvchi so’rov yuborganda, so’ralgan ma’lumotni nechadir soniyalarda emas, millisoniyalarda taqdim etsa bo’ladi. Ammo doimgidek to’g’ri sozlashni ham bilish kerak.
Caching (keshlash) ishlatayotganda juda ehtiyotkor bo’lib ishlating. Avvalo u sizga qanchalik zarur va dasturning aynan qaysi qismlariga ishlatmoqchisiz, shuni aniqlab oling. Cachingni har bir foydalanuvchiga alohida ma’lumot yuboruvchi endpointlarga qo’llash unchalik ham to’g’ri ish emas, agar to’g’ri sozlay olmasangiz foydalanuvchi so’ragan ma’lumotni emas, boshqa ma’lumotni jo’natib qo’yishingiz ham mumkin.
Barchaga umumiy bo’lgan ma’lumotlar uchun, bir muncha vaqt oladigan murakkab hisob kitobni talab qiladigan sahifalar va sekinroq javob qaytadigan tashqi API larga bog’langan qismlarga Caching ishlatish ish unumdorligini oshirib, javob qaytish vaqtini karrasiga kamaytirib beradi.
Cache Invalidation ni to’g’ri sozlang. Bu eski ma’lumotlarni keshdan o’chirib tashlash jarayoni. Caching ishlatganda, qanchadir muddatdan so’ng keshlangan ma’lumot o’chib ketishini ta’minlash uchun expiration time (yaroqlilik muddatini) belgilang. Aks holda eski ma’lumotni foydalanuvchiga yuborishingiz mumkin va eski keshlangan ma’lumotlar yig’ilib, xotiradan unumli foydalanishingizga to’sqinlik qiladi.
Expiration time ham eng ideal yechim emas, misol uchun siz har 25 daqiqada keshlangan ma’lumotni o’chirib tashlaydigan qilgansiz, lekin ma’lumotlar bazasida siz cachingda ishlatgan Model(DB table) yangilandi yoki biror bir ma’lumot o’chirib tashlandi va tabiiyki sizning kesh xotirangiz bu aks etmaydi. Buni oldini olish uchun esa Django signal dan foydalanishni tavsiya qilaman. Post_save va post_delete signallari orqali kerakli modellarni ulab, ular o’zgargan vaqtda redis cachingni o’chirib tashlaydigan funksiya yozsangiz bo’ladi.
Caching ni to’g’ri sozlay olsangiz, sizga judayam katta foydasi tegishi aniq
Caching (keshlash) ishlatayotganda juda ehtiyotkor bo’lib ishlating. Avvalo u sizga qanchalik zarur va dasturning aynan qaysi qismlariga ishlatmoqchisiz, shuni aniqlab oling. Cachingni har bir foydalanuvchiga alohida ma’lumot yuboruvchi endpointlarga qo’llash unchalik ham to’g’ri ish emas, agar to’g’ri sozlay olmasangiz foydalanuvchi so’ragan ma’lumotni emas, boshqa ma’lumotni jo’natib qo’yishingiz ham mumkin.
Barchaga umumiy bo’lgan ma’lumotlar uchun, bir muncha vaqt oladigan murakkab hisob kitobni talab qiladigan sahifalar va sekinroq javob qaytadigan tashqi API larga bog’langan qismlarga Caching ishlatish ish unumdorligini oshirib, javob qaytish vaqtini karrasiga kamaytirib beradi.
Cache Invalidation ni to’g’ri sozlang. Bu eski ma’lumotlarni keshdan o’chirib tashlash jarayoni. Caching ishlatganda, qanchadir muddatdan so’ng keshlangan ma’lumot o’chib ketishini ta’minlash uchun expiration time (yaroqlilik muddatini) belgilang. Aks holda eski ma’lumotni foydalanuvchiga yuborishingiz mumkin va eski keshlangan ma’lumotlar yig’ilib, xotiradan unumli foydalanishingizga to’sqinlik qiladi.
Expiration time ham eng ideal yechim emas, misol uchun siz har 25 daqiqada keshlangan ma’lumotni o’chirib tashlaydigan qilgansiz, lekin ma’lumotlar bazasida siz cachingda ishlatgan Model(DB table) yangilandi yoki biror bir ma’lumot o’chirib tashlandi va tabiiyki sizning kesh xotirangiz bu aks etmaydi. Buni oldini olish uchun esa Django signal dan foydalanishni tavsiya qilaman. Post_save va post_delete signallari orqali kerakli modellarni ulab, ular o’zgargan vaqtda redis cachingni o’chirib tashlaydigan funksiya yozsangiz bo’ladi.
@receiver([post_save, post_delete], sender=
Products)
def
product_invalidate_cache(sender, instance, **kwargs):
cache_key = {'
product_key’: str(
instance.id)}
cache_key_str = json.dumps(cache_key)
redis.delete(cache_key_str)
Caching ni to’g’ri sozlay olsangiz, sizga judayam katta foydasi tegishi aniq
Handling a Million Tasks in Django: Efficient Prioritization with Celery, Redis, and Flower
More: https://medium.com/@srinivasaravind5/handling-a-million-tasks-in-django-efficient-prioritization-with-celery-redis-and-flower-b06fc8957d5
More: https://medium.com/@srinivasaravind5/handling-a-million-tasks-in-django-efficient-prioritization-with-celery-redis-and-flower-b06fc8957d5
Medium ilovasidan foydalanishingiz maslahat berar edim, juda ko’plab ajoyib maqolalarni topishingiz mumkin. 📚
Mediumda ‘Reading List’da uzimga o’qigan va o’qiyotgan barcha maqolalarni jamlamoqdaman: ⬇️
https://medium.com/@davrondev/list/predefined:f5289fbfd4e8:READING_LIST 🔗
Mediumda ‘Reading List’da uzimga o’qigan va o’qiyotgan barcha maqolalarni jamlamoqdaman: ⬇️
https://medium.com/@davrondev/list/predefined:f5289fbfd4e8:READING_LIST 🔗
Forwarded from PyNotes
#Django_ORM #filters
Subquery
Django allows using SQL subqueries. Let’s start with something simple, We have a UserParent model which has OnetoOne relation with auth user. We will find all the UserParent which have a UserParent.
from django.db.models import Subquery
users = User.objects.all()
UserParent.objects.filter(user_id__in=Subquery(users.values('id')))
#source
https://books.agiliq.com/projects/django-orm-cookbook/en/latest/subquery.html
Subquery
Django allows using SQL subqueries. Let’s start with something simple, We have a UserParent model which has OnetoOne relation with auth user. We will find all the UserParent which have a UserParent.
from django.db.models import Subquery
users = User.objects.all()
UserParent.objects.filter(user_id__in=Subquery(users.values('id')))
#source
https://books.agiliq.com/projects/django-orm-cookbook/en/latest/subquery.html
Forwarded from Malikov | Blog | Notes
Software Engineering at Google.pdf
7.5 MB
Resume tayorlashingizda oneapp.ly va linkedin.com saytidagi classic template mode #recommendation qilgan bular edim :)
More: https://old.mohirdev.uz/yaxshi-resume/ 🇺🇿
#resume
More: https://old.mohirdev.uz/yaxshi-resume/ 🇺🇿
#resume
Docker Container Backup/Restore Guide
p/s Bugungi kundagi "Stellar job" bu databse qayta tiklash buldi 🥶.
Loyhalarda DataBase muhum hisoblaniladi shu bois undan buckuplar olib turish kerak (avto)
More: https://simplebackups.com/blog/docker-container-backup-restore-guide/
p/s Bugungi kundagi "Stellar job" bu databse qayta tiklash buldi 🥶.
Loyhalarda DataBase muhum hisoblaniladi shu bois undan buckuplar olib turish kerak (avto)
More: https://simplebackups.com/blog/docker-container-backup-restore-guide/
* Dockerdan loyhalarimizda
💡 Bu algorithmlar qoidasi kabi: Tezlik ko'proq memory talab qiladi, Kamroq memory esa ko'proq vaqt
Build cache tozalash uchun:
commandasi (volumelada backup olib quyganiz ham maqul) 🧹
p/s CI/CD buyicha serverda faqat docker-compose.yml file turishi kerak u imagelarni dockerHubdan tortib image uzini qayta up qilishi kerak holos
None image larni tozalash uchun:
More: https://medium.com/@iceburn/remove-docker-build-cache-3eca3d44dbb3
https://docs.docker.com/build/cache/
https://lipanski.com/posts/speed-up-your-docker-builds-with-cache-from 🔥 (optimize )
build time
kamaytirish maqsadida cache management
ishlatar edik va 100GB serverimizda No Space error
bulib qolgan edi🚀*
docker system df- commandasi orqali build cache 80GB bulib ketgani kurgan edik🥶
💡 Bu algorithmlar qoidasi kabi: Tezlik ko'proq memory talab qiladi, Kamroq memory esa ko'proq vaqt
Build cache tozalash uchun:
docker builder prune
commandasi (volumelada backup olib quyganiz ham maqul) 🧹
p/s CI/CD buyicha serverda faqat docker-compose.yml file turishi kerak u imagelarni dockerHubdan tortib image uzini qayta up qilishi kerak holos
None image larni tozalash uchun:
docker rmi -f $(docker images | grep "<none>" | awk "{print \$3}")
More: https://medium.com/@iceburn/remove-docker-build-cache-3eca3d44dbb3
https://docs.docker.com/build/cache/
https://lipanski.com/posts/speed-up-your-docker-builds-with-cache-from 🔥 (optimize )
Xa bugun shanba dam olish - (lazy day) ammo serverda kutilmagan error tufayli tasklar girdobida qoldik 😐
p/s Maslahatim 1haftalik yangi featurelarni juma kuniga production ga deploy qilmang 🥲
p/s Maslahatim 1haftalik yangi featurelarni juma kuniga production ga deploy qilmang 🥲
LINKS TO LEARN DEVOPS
1) Linux :
Basic Linux commands are necessary before jumping into shell scripting.
* https://lnkd.in/dBTsJbhz
* https://lnkd.in/dHQTiHBB
* https://lnkd.in/dA9pAmHa
2. Shell Scripting:
* https://lnkd.in/da_wHgQH
* https://lnkd.in/d5CFPgga
3. Python: This will help you in automation
* https://lnkd.in/dFtNz_9D
* https://lnkd.in/d6cRpFrY
* https://lnkd.in/d-EhshQz
4. Networking
* https://lnkd.in/dEmZ8zhY
* https://lnkd.in/dqTx6jmN
* https://lnkd.in/dRqCzbkn
5. Git & Github
* https://lnkd.in/d9gw-9Ds
* https://lnkd.in/dEp3KrTJ
6. YAML
https://lnkd.in/duvmhd5X
https://lnkd.in/dNqrXjmV
7. Containers — Docker:
* https://lnkd.in/dcKuY4j5
* https://lnkd.in/dY2ZswMZ
* https://lnkd.in/d_EySpbh
* https://lnkd.in/dPddbJTf
8. Continuous Integration & Continuous Deployment (CI/CD):
* https://lnkd.in/dMHv9T8U
9. Container Orchestration — Kubernetes:
* https://lnkd.in/duGZwHYX
10. Monitoring:
* https://lnkd.in/dpXhmVqs
* https://lnkd.in/dStQbpRX
* https://lnkd.in/de4H5QVz
* https://lnkd.in/dEtTSsbB
11. Infrastructure Provisioning & Configuration Management (IaC): Terraform, Ansible, Pulumi
* https://lnkd.in/dvpzNT5M
* https://lnkd.in/dNugwtVW
* https://lnkd.in/dn5m2NKQ
* https://lnkd.in/dhknHJXp
* https://lnkd.in/ddNxd8vU
12. CI/CD Tools: Jenkins, GitHub Actions, GitLab CI, Travis CI, AWS CodePipeline + AWS CodeBuild, Azure DevOps, etc
* https://lnkd.in/dTmSXNzv
* https://lnkd.in/dAnxpVTe
* https://lnkd.in/daMFG3Hq
* https://lnkd.in/dqf-zzrx
* https://lnkd.in/diWP7Tm7
* https://lnkd.in/dYDCSiiC
13. AWS:
* https://lnkd.in/dmi-TMv9
* https://lnkd.in/de3-dAB6
* https://lnkd.in/dh2zXZAB
* https://lnkd.in/dQMyCBWy
14. Learn how to SSH
SSH using mobaxterm:
* https://lnkd.in/gx-T_FU8
15. SSH using Putty :
* https://lnkd.in/gGgW7Ns9
HAPPY LEARNING 📌
From: Source
@saidamins_blog🏴
1) Linux :
Basic Linux commands are necessary before jumping into shell scripting.
* https://lnkd.in/dBTsJbhz
* https://lnkd.in/dHQTiHBB
* https://lnkd.in/dA9pAmHa
2. Shell Scripting:
* https://lnkd.in/da_wHgQH
* https://lnkd.in/d5CFPgga
3. Python: This will help you in automation
* https://lnkd.in/dFtNz_9D
* https://lnkd.in/d6cRpFrY
* https://lnkd.in/d-EhshQz
4. Networking
* https://lnkd.in/dEmZ8zhY
* https://lnkd.in/dqTx6jmN
* https://lnkd.in/dRqCzbkn
5. Git & Github
* https://lnkd.in/d9gw-9Ds
* https://lnkd.in/dEp3KrTJ
6. YAML
https://lnkd.in/duvmhd5X
https://lnkd.in/dNqrXjmV
7. Containers — Docker:
* https://lnkd.in/dcKuY4j5
* https://lnkd.in/dY2ZswMZ
* https://lnkd.in/d_EySpbh
* https://lnkd.in/dPddbJTf
8. Continuous Integration & Continuous Deployment (CI/CD):
* https://lnkd.in/dMHv9T8U
9. Container Orchestration — Kubernetes:
* https://lnkd.in/duGZwHYX
10. Monitoring:
* https://lnkd.in/dpXhmVqs
* https://lnkd.in/dStQbpRX
* https://lnkd.in/de4H5QVz
* https://lnkd.in/dEtTSsbB
11. Infrastructure Provisioning & Configuration Management (IaC): Terraform, Ansible, Pulumi
* https://lnkd.in/dvpzNT5M
* https://lnkd.in/dNugwtVW
* https://lnkd.in/dn5m2NKQ
* https://lnkd.in/dhknHJXp
* https://lnkd.in/ddNxd8vU
12. CI/CD Tools: Jenkins, GitHub Actions, GitLab CI, Travis CI, AWS CodePipeline + AWS CodeBuild, Azure DevOps, etc
* https://lnkd.in/dTmSXNzv
* https://lnkd.in/dAnxpVTe
* https://lnkd.in/daMFG3Hq
* https://lnkd.in/dqf-zzrx
* https://lnkd.in/diWP7Tm7
* https://lnkd.in/dYDCSiiC
13. AWS:
* https://lnkd.in/dmi-TMv9
* https://lnkd.in/de3-dAB6
* https://lnkd.in/dh2zXZAB
* https://lnkd.in/dQMyCBWy
14. Learn how to SSH
SSH using mobaxterm:
* https://lnkd.in/gx-T_FU8
15. SSH using Putty :
* https://lnkd.in/gGgW7Ns9
HAPPY LEARNING 📌
From: Source
@saidamins_blog🏴
LinkedIn
LinkedIn: Log In or Sign Up
1 billion members | Manage your professional identity. Build and engage with your professional network. Access knowledge, insights and opportunities.
Djangoda powerful ORM and query capabilities built-in:
❇️ Case... When …
Qachon: Book degan databasedagi faqat “categoriyasi Romance bulganlarga 20% chigirma bulsin, Historical categorysidagi kitoblarga 35% chegirma elon qilinayotganda ishlatishingiz mumkin (example)
Qanday? 😐
More: https://juhanajauhiainen.com/posts/advanced-django-queries
❇️ Case... When …
Qachon: Book degan databasedagi faqat “categoriyasi Romance bulganlarga 20% chigirma bulsin, Historical categorysidagi kitoblarga 35% chegirma elon qilinayotganda ishlatishingiz mumkin (example)
Qanday? 😐
from django.db.models import F, Q, Value, When, Case
from decimal import Decimal
books = Book.objects.annotate(discounted_price=Case(
When(category="Romance", then=F("price") * Decimal(0.95)),
When(category="Historical fiction", then=F("price") * Decimal(0.8)),
default=None
))
Nega
:🤔
For
gets filtered data from database quickly 🚀
More: https://juhanajauhiainen.com/posts/advanced-django-queries
Vaqt kerak
Oldinlari "vaqt" muammo edi hozir esa uni "to'g'ri sarflash".
Biz vaqtim yo'q iborasini ishlatamiz aslida esa noto'g'ri. Vaqt doim bo'lgan.
Uxlash, yeyish, dam olish, kitob o'qish, ishlash uchun topilayabdiku.
Vaqtni topishdan ko'ra to'g'ri sarflash qiyinroq muammo deb bilaman.
Instagramga ketadigan vaqtingizni o'sha ishlarga sarflang.
Vaqtingizni bekorchi o'g'irlaydigan ishlardan o'zingizni chetlating.
Doim oldinda bo'ling. Ustozingiz 1-mavzuda bo'lsa siz 3-mavzuda bo'ling.
Internet rivojlangan davrda oldinda yurish muammo emas qidirmaslik muammo.
Vaqt doim topilgan va topiladi. Ammo uni sarflash uchun qobilyat va matonat kerak.
Manba: @otabeknurmatov_1
Oldinlari "vaqt" muammo edi hozir esa uni "to'g'ri sarflash".
Biz vaqtim yo'q iborasini ishlatamiz aslida esa noto'g'ri. Vaqt doim bo'lgan.
Uxlash, yeyish, dam olish, kitob o'qish, ishlash uchun topilayabdiku.
Vaqtni topishdan ko'ra to'g'ri sarflash qiyinroq muammo deb bilaman.
Instagramga ketadigan vaqtingizni o'sha ishlarga sarflang.
Vaqtingizni bekorchi o'g'irlaydigan ishlardan o'zingizni chetlating.
Doim oldinda bo'ling. Ustozingiz 1-mavzuda bo'lsa siz 3-mavzuda bo'ling.
Internet rivojlangan davrda oldinda yurish muammo emas qidirmaslik muammo.
Vaqt doim topilgan va topiladi. Ammo uni sarflash uchun qobilyat va matonat kerak.
Manba: @otabeknurmatov_1
I ❤️ Uzbekistan 🇺🇿 (HAS NOT BEEN SELECTED)
Siz AQSHda yashash huquqini beruvchi “Green Card” lotariyasi o’ynagan edizmi? :👇
p/s GreenCard bu AQSH ga ketishning yagona yo’li emas ❗️
More: YouTube.com 💁♂️
#trend🔥
Siz AQSHda yashash huquqini beruvchi “Green Card” lotariyasi o’ynagan edizmi? :👇
p/s GreenCard bu AQSH ga ketishning yagona yo’li emas ❗️
More: YouTube.com 💁♂️
#trend
Please open Telegram to view this post
VIEW IN TELEGRAM
Forwarded from Простой Python | Программирование
Django: Mixins
Продолжаем делиться циклом видеоматериалов про Django. В этот раз ты узнаешь, что такое mixins (миксины) и как с их помощью устранить дублирование кода в классах представлений. Рассматривается пример стандартного миксина LoginRequiredMixin и декоратор login required.
👀Смотреть видео
#видео #django
Продолжаем делиться циклом видеоматериалов про Django. В этот раз ты узнаешь, что такое mixins (миксины) и как с их помощью устранить дублирование кода в классах представлений. Рассматривается пример стандартного миксина LoginRequiredMixin и декоратор login required.
👀Смотреть видео
#видео #django
Exploring MRO in Python Programming Language:
AI yordamida presentatsiya tayyorlab kòrdim.👇
Link: https://gamma.app/public/Exploring-MRO-in-Python-Programming-Language-45cj4ayqgfbn6yi
AI yordamida presentatsiya tayyorlab kòrdim.👇
Link: https://gamma.app/public/Exploring-MRO-in-Python-Programming-Language-45cj4ayqgfbn6yi
Django Rest Frameworkidan foydalangan holda API lar chiqarish uchun bir nechta class based view lar mavjud. 🤓
Bular: APIView, GenericAPIView, ViewSet, Mixins va boshqa. Bularning barchasining asosiy maqsadi API chiqarish lekin qaysi holatlarda qaysidan foydalanish bilmay, chalg'ib qolishimiz mumkin. 🤷♂️
Siz API chiqarishda qaysi Class Based (function based) ko'proq ishlatasiz va nega? 🤔 👇
AI yordamida tayyorlangan prezintatsiya link(qisqacha): https://gamma.app/public/Django-Rest-Framework-Class-Views-Explained-6ghdiz721gd9whb
More: https://dev.to/earthcomfy/class-based-views-in-drf-are-powerful-19dg ⛓
Bular: APIView, GenericAPIView, ViewSet, Mixins va boshqa. Bularning barchasining asosiy maqsadi API chiqarish lekin qaysi holatlarda qaysidan foydalanish bilmay, chalg'ib qolishimiz mumkin. 🤷♂️
Siz API chiqarishda qaysi Class Based (function based) ko'proq ishlatasiz va nega? 🤔 👇
AI yordamida tayyorlangan prezintatsiya link(qisqacha): https://gamma.app/public/Django-Rest-Framework-Class-Views-Explained-6ghdiz721gd9whb
More: https://dev.to/earthcomfy/class-based-views-in-drf-are-powerful-19dg ⛓
Garbage Collection
Garbage collector odatda xotirani toza saqlash uchun kerak. U xuddi bir xizmatkorga o'xshaydi. Agar xonangizda keraksiz va ishlatilmaydigan narsalarni ko'rsangiz uni axlatga olib chiqib tashlaysiz. Xuddi shu ishni dasturlash tillarida Garbage Collectorlar bajaradi.
Hop Garbage collector qachon va qanday keraksiz object yoki data ni aniqlaydi?
Bu ishni amalga oshirish uchun inson qanday yo'l tutsa dastur ham deyarli o'shanday ish qiladi. Ya'ni reference count xisoblanadi. Inson biror narsani kim va necha marta ishlatishini ko'rib aniqlasa, dastur reference count xisoblaydi. Reference bu biror objectga yo'naltirilgan pointer ya'ni ko'rsatgich yo'l deb atasak bo'ladi.
Reference Count qanday ko'payadi yoki kamayadi?
Bilamizki biror o'zgaruvchi ochganimizda biz unga qiymat saqlamaymiz, balkim o'zgaruvchilar shunchaki bizni o'sha qiymatga kirishimiz uchun ko'rsatgich vazifasini o'taydi.
Bu huddi mahallada har bir nuqtaga odam qo'yib yashinmachoq o'ynashdek gap. Ya'ni qo'ygan odamlariz kim-qayerga ketganini ko'rsatib turadi va siz ko'p vaqt sarflamasdan ularni tez topishingiz mumkin (O(1) vaqtda desa ham bo'ladi 😅). O'zgaruvchilar ham shu vazifani bajaradi.
Qachon bir nechta o'zgaruvchi bitta object yoki dataga reference bo'lsa u yerda reference count oshadi. Agar ular keyin boshqa objectga reference qilinsa yoki o'chirib tashlansa, RC tushadi.
Misol uchun:
a = "hello" # "hello" objecti yaratildi va a unga reference bo'ldi
b = a # Ref. Count 1taga oshdi.
del a # Ref. Count 1taga tushdi
b = 17 # Ref. count 1taga kamaydi
Yuqoridagi misol Python dasturlash tiliga tegishli va u yerda reference count qachon oshishi va qachon tushishi ko'rsatilgan.
Kelin buni real ko'rish uchun mana bunday ish qilamiz. sys modulini getrefcount() funksiyasi bizga objectimiz nechta referencega egaligini ko'rishimiz mumkin. del() dunder methodi orqali esa object o'chirilganini ko'rishimiz mumkin, del statement objectni o'chirish uchun ishlatiladi.
Manba
Garbage collector odatda xotirani toza saqlash uchun kerak. U xuddi bir xizmatkorga o'xshaydi. Agar xonangizda keraksiz va ishlatilmaydigan narsalarni ko'rsangiz uni axlatga olib chiqib tashlaysiz. Xuddi shu ishni dasturlash tillarida Garbage Collectorlar bajaradi.
Hop Garbage collector qachon va qanday keraksiz object yoki data ni aniqlaydi?
Bu ishni amalga oshirish uchun inson qanday yo'l tutsa dastur ham deyarli o'shanday ish qiladi. Ya'ni reference count xisoblanadi. Inson biror narsani kim va necha marta ishlatishini ko'rib aniqlasa, dastur reference count xisoblaydi. Reference bu biror objectga yo'naltirilgan pointer ya'ni ko'rsatgich yo'l deb atasak bo'ladi.
Reference Count qanday ko'payadi yoki kamayadi?
Bilamizki biror o'zgaruvchi ochganimizda biz unga qiymat saqlamaymiz, balkim o'zgaruvchilar shunchaki bizni o'sha qiymatga kirishimiz uchun ko'rsatgich vazifasini o'taydi.
Bu huddi mahallada har bir nuqtaga odam qo'yib yashinmachoq o'ynashdek gap. Ya'ni qo'ygan odamlariz kim-qayerga ketganini ko'rsatib turadi va siz ko'p vaqt sarflamasdan ularni tez topishingiz mumkin (O(1) vaqtda desa ham bo'ladi 😅). O'zgaruvchilar ham shu vazifani bajaradi.
Qachon bir nechta o'zgaruvchi bitta object yoki dataga reference bo'lsa u yerda reference count oshadi. Agar ular keyin boshqa objectga reference qilinsa yoki o'chirib tashlansa, RC tushadi.
Misol uchun:
a = "hello" # "hello" objecti yaratildi va a unga reference bo'ldi
b = a # Ref. Count 1taga oshdi.
del a # Ref. Count 1taga tushdi
b = 17 # Ref. count 1taga kamaydi
Yuqoridagi misol Python dasturlash tiliga tegishli va u yerda reference count qachon oshishi va qachon tushishi ko'rsatilgan.
Kelin buni real ko'rish uchun mana bunday ish qilamiz. sys modulini getrefcount() funksiyasi bizga objectimiz nechta referencega egaligini ko'rishimiz mumkin. del() dunder methodi orqali esa object o'chirilganini ko'rishimiz mumkin, del statement objectni o'chirish uchun ishlatiladi.
import sys
class MyClass:
def __init__(self):
print("Creating object")
def __del__(self):
print("Deleting object")
obj = MyClass()
print("Reference count:", sys.getrefcount(obj) - 1)
# Reference Coutni oshiramiz
obj2 = obj
print("Reference count:", sys.getrefcount(obj) - 1)
# obj2 referenceni o'chiramiz
del obj2
print("Reference count:", sys.getrefcount(obj) - 1)
# obj ni o'chiramiz
del obj
Umid qilaman qisqacha Garbage collection mavzusiga tushunib oldingiz deb. Keyingi postda chuqurroq yoritishga harakt qilaman. Xatolar bo'lsa oldindan uzur.Manba