Conținut curs
Python Avansat
Despre lecție
  1. Introducere în context managers

    • Ce sunt context managers și de ce sunt utili
    • Exemple de context managers în Python (open, threading.Lock, etc.)
    • Cum să utilizați un context manager cu instrucțiunea with
  2. Crearea unui context manager simplu

    • Utilizarea metodelor magice __enter__ și __exit__
    • Menținerea și eliberarea resurselor într-un context manager
    • Exemplu: context manager pentru măsurarea timpului de execuție
    • Exercițiu: creați un context manager pentru scrierea într-un fișier
  3. Gestionarea excepțiilor în context managers

    • Cum să gestionați excepții în metoda __exit__
    • Exemplu: context manager pentru tratarea erorilor de scriere într-un fișier
    • Exercițiu: creați un context manager pentru gestionarea conexiunilor la o bază de date
  4. Context managers anidate și reutilizabile

    • Cum să combinați mai mulți context managers într-o singură instrucțiune with
    • Exemplu: context manager pentru tranzacții în baze de date
    • Exercițiu: creați un context manager pentru gestionarea mai multor fișiere
  5. Crearea context managers cu ajutorul decoratorilor

    • Utilizarea contextlib.contextmanager pentru a defini context managers
    • Exemplu: context manager pentru schimbarea directorului curent
    • Exercițiu: creați un context manager pentru gestionarea fișierelor temporare
  6. Context managers și concurență

    • Utilizarea context managers pentru sincronizarea accesului la resurse în programe concurente
    • Exemplu: context manager pentru un lock de tip threading.Lock
    • Exercițiu: creați un context manager pentru gestionarea conexiunilor la o bază de date într-un mediu concurent

Exemple și exerciții pentru fiecare subpunct:

Exemplu: context manager pentru măsurarea timpului de execuție

python
import time

class Cronometru:
    def __enter__(self):
        self.start = time.time()

    def __exit__(self, exc_type, exc_val, exc_tb):
        self.stop = time.time()
        print(f"Timpul de execuție: {self.stop - self.start:.2f} secunde")

with Cronometru():
    # Introduceți aici codul al cărui timp de execuție vreți să-l măsurați
    time.sleep(2)

Exercițiu:

Creați un context manager pentru scrierea într-un fișier. Acest context manager ar trebui să deschidă fișierul în modul de scriere la început și să-l închidă la sfârșit, gestionând și eventualele excepții.

Exemplu: context manager pentru schimbarea directorului curent cu contextlib.contextmanager

python
import os
from contextlib import contextmanager

@contextmanager
def schimba_director_curent(nou_director):
    director_curent = os.getcwd()
    try:
        os.chdir(nou_director)
        yield
    finally:
        os.chdir(director_curent)

with schimba_director_curent("/tmp"):
    print(os.getcwd())  # /tmp

Exercițiu:

Creați un context manager pentru gestionarea fișierelor temporare. Acest context manager ar trebui să creeze un fișier temporar la început, să permită operarea cu acesta și să-l șteargă la sfârșit. Utilizați decoratorul contextlib.contextmanager pentru a defini context manager-ul.