Conținut curs
Python Avansat
Despre lecție
  1. Introducere în gestionarea resurselor

    • Importanța gestionării eficiente a resurselor
    • Resurse comune în dezvoltarea software: memorie, fișiere, conexiuni
  2. Lucrul cu memoria în Python

    • Introducere în gestionarea memoriei în Python
    • Garbage collection și referințe ciclice
    • Modulul gc și controlul garbage collection-ului
  3. Gestionarea memoriei prin utilizarea obiectelor

    • Utilizarea obiectelor slabe (weakref)
    • WeakKeyDictionary și WeakValueDictionary
    • Utilizarea obiectelor slabe pentru a evita referințele ciclice
  4. Gestionarea resurselor externe

    • Deschiderea și închiderea fișierelor cu open și close
    • Gestionarea conexiunilor la baze de date și alte resurse
  5. Utilizarea managerilor de context

    • Sintaxa with și conceptul de manager de context
    • Crearea propriilor manageri de context prin implementarea metodelor __enter__ și __exit__
    • Utilizarea managerilor de context pentru gestionarea resurselor
  6. Recapitulare și bune practici

    • Rezumatul lecției și a tehnicilor prezentate
    • Bune practici pentru lucrul cu memoria și gestionarea resurselor

Exemple și exerciții pentru fiecare subpunct:

Exemplu: Utilizarea gc pentru a investiga colectarea gunoiului

python
import gc

print("Gărâie colectorul de gunoi:", gc.isenabled())

# Dezactivarea colectorului de gunoi
gc.disable()
print("Gărâie colectorul de gunoi:", gc.isenabled())

# Reactivarea colectorului de gunoi
gc.enable()
print("Gărâie colectorul de gunoi:", gc.isenabled())

Exercițiu:

Creați o clasă care creează referințe ciclice și utilizați modulul gc pentru a forța colectarea gunoiului și eliberarea memoriei.

Exemplu: Utilizarea obiectelor slabe (weakref)

python
import weakref

class Exemplu:
    pass

obiect_puternic = Exemplu()
obiect_slab = weakref.ref(obiect_puternic)

print(obiect_slab())
del obiect_puternic
print(obiect_slab())

Exercițiu:

Creați o clasă care stochează referințe la alte obiecte și folosiți WeakValueDictionary pentru a evita referințele ciclice.

Exemplu: Gestionarea fișierelor cu manageri de context

python
with open("exemplu.txt", "w") as fisier:
    fisier.write("Acesta este un exemplu de fișier.")

print("Fișierul a fost închis?", fisier.closed)

Exercițiu:

Creați un manager de context care să gestioneze conexiunile la o bază de date fictivă și să se asigure că acestea sunt închise corect.

Rezumat:

În această lecție, am explorat conceptul de gestionare a resurselor și am învățat cum să lucrăm cu memoria și să gestionăm resursele în Python. Am discutat despre gestionarea memoriei în Python, garbage collection și referințe ciclice, și am introdus modulul gc pentru controlul garbage collection-ului.

Am prezentat utilizarea obiectelor slabe (weakref), WeakKeyDictionary și WeakValueDictionary pentru a evita referințele ciclice și a gestiona memoria într-un mod mai eficient. De asemenea, am discutat despre gestionarea resurselor externe, cum ar fi fișierele și conexiunile la baze de date, și am introdus managerii de context și sintaxa with pentru a gestiona resursele într-un mod sigur și elegant.

În final, am recapitulat lecția și am oferit bune practici pentru lucrul cu memoria și gestionarea resurselor. Aceste cunoștințe ne vor ajuta să scriem cod mai eficient și să identificăm și să remediem problemele de resurse în programele noastre.