-
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
-
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
- Utilizarea metodelor magice
-
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
- Cum să gestionați excepții în metoda
-
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
- Cum să combinați mai mulți context managers într-o singură instrucțiune
-
Crearea context managers cu ajutorul decoratorilor
- Utilizarea
contextlib.contextmanagerpentru a defini context managers - Exemplu: context manager pentru schimbarea directorului curent
- Exercițiu: creați un context manager pentru gestionarea fișierelor temporare
- Utilizarea
-
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
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
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.