Thông báo: Download 4 khóa học Python từ cơ bản đến nâng cao tại đây.
Cách tự viết Context Manager trong Python
Context managers là công cụ hiệu quả để quản lý tài nguyên trong Python, cho phép ta phân bổ và giải phóng tài nguyên một cách chính xác. Context managers đảm bảo rằng tài nguyên sẽ được giải phóng đúng cách ngay cả khi có lỗi xảy ra.

Mở và đóng file với câu lệnh with open() trong Python
with open('ghi_chu.txt', 'w') as f:
f.write('công việc cần làm...')
Trong Python, bạn có thể dễ dàng tự tạo context manager bằng cách sử dụng decorator @contextmanager từ thư viện contextlib. Để thực hiện, chỉ cần tạo một hàm và áp dụng các bước sau:
- Sử dụng decorator
@contextmanagerđể đánh dấu hàm như một context manager. - Bên trong hàm, sử dụng khối lệnh
try-finally. - Trong khối
try, dùng lệnhyieldđể cung cấp tài nguyên. - Trong khối
finally, giải phóng tài nguyên.
Ví dụ trừu tượng dưới đây minh họa cách hoạt động này:
from contextlib import contextmanager
@contextmanager
def quan_ly_tai_nguyen(*args, **kwargs):
# Mã để lấy tài nguyên, ví dụ:
resource = acquire_resource(*args, **kwargs)
try:
yield resource
finally:
# Mã để giải phóng tài nguyên
release_resource(resource)
Khi sử dụng context manager này:
Bài viết này được đăng tại [free tuts .net]
with quan_ly_tai_nguyen(timeout=3600) as resource:
# thao tác với tài nguyên
Tự viết Context Manager để mở và đóng File trong Python
from contextlib import contextmanager
@contextmanager
def mo_file_quan_ly(filename):
f = open(filename, 'w')
try:
yield f
finally:
f.close()
with mo_file_quan_ly('ghi_chu.txt') as f:
f.write('công việc cần làm...')
Sử dụng:
with mo_file_quan_ly('ghi_chu.txt') as f:
f.write('Công việc cần làm...')
Viết Context Manager bằng Class trong Python
Một cách khác để viết context manager là dùng một lớp với hai phương thức __enter__ và __exit__. Phương thức __enter__ sẽ thực hiện các thao tác chuẩn bị và trả về tài nguyên, còn __exit__ sẽ giải phóng tài nguyên khi kết thúc.
Ví dụ:
class QuanLyFile:
def __init__(self, filename):
self.filename = filename
def __enter__(self):
self.file = open(self.filename, 'w')
return self.file
def __exit__(self, exc_type, exc_value, traceback):
self.file.close()
with QuanLyFile('ghi_chu.txt') as f:
f.write('Công việc cần làm...')
Kết bài
Context managers giúp mã Python gọn gàng, quản lý tài nguyên hiệu quả và tránh rủi ro thất thoát tài nguyên. Qua các ví dụ trên, bạn có thể linh hoạt tạo context manager tùy theo nhu cầu, đảm bảo ứng dụng của mình vận hành ổn định và tối ưu hơn khi làm việc với tài nguyên.

Các kiểu dữ liệu trong C ( int - float - double - char ...)
Thuật toán tìm ước chung lớn nhất trong C/C++
Cấu trúc lệnh switch case trong C++ (có bài tập thực hành)
ComboBox - ListBox trong lập trình C# winforms
Random trong Python: Tạo số random ngẫu nhiên
Lệnh cin và cout trong C++
Cách khai báo biến trong PHP, các loại biến thường gặp
Download và cài đặt Vertrigo Server
Thẻ li trong HTML
Thẻ article trong HTML5
Cấu trúc HTML5: Cách tạo template HTML5 đầu tiên
Cách dùng thẻ img trong HTML và các thuộc tính của img
Thẻ a trong HTML và các thuộc tính của thẻ a thường dùng