Trong hướng dẫn này, chúng ta sẽ tìm hiểu về "Trình quản lý bối cảnh" trong Python và cách nó hữu ích trong việc quản lý tài nguyên, bộ mô tả tệp và kết nối cơ sở dữ liệu
Quản lý tài nguyên
Người dùng sử dụng các tài nguyên như thao tác tệp hoặc kết nối cơ sở dữ liệu rất phổ biến trong bất kỳ ngôn ngữ lập trình nào
Nhưng tất cả những tài nguyên này đều có giới hạn. Do đó, vấn đề chính là đảm bảo các tài nguyên này sẽ được giải phóng sau khi sử dụng
Bởi vì nếu chúng không được giải phóng, điều này có thể dẫn đến rò rỉ tài nguyên, điều này có thể khiến hệ thống chạy chậm hoặc gặp sự cố. Nếu máy được thiết lập trong hệ thống của người dùng, có thể tự động chia nhỏ tài nguyên, điều đó có thể rất hữu ích. Trong Python, người dùng có thể đạt được điều này bằng cách sử dụng trình quản lý bối cảnh, được sử dụng để hỗ trợ xử lý tài nguyên đúng cách. Cách phổ biến nhất để thực hiện các thao tác với tệp là sử dụng từ khóa "with" trong Python
ví dụ 1
Hãy xem một ví dụ về quản lý tập tin. Khi một tệp được mở, các bộ mô tả tệp sẽ được sử dụng, đây là một tài nguyên hạn chế. Quá trình chỉ có thể mở một số lượng tệp hạn chế tại một thời điểm
ví dụ 2
đầu ra
OSError Traceback [most recent call last] in 1 file_descriptors = [] 2 for Y in range[10000]: ----> 3 file_descriptors.append[ open ['test_file.txt', 'w']] OSError: [Errno 24] Too many open files: 'test_file.txt'
Ví dụ trên là trường hợp rò rỉ bộ mô tả tệp. Đã xảy ra lỗi cho biết "Quá nhiều tệp đang mở". Điều này xảy ra do có quá nhiều tệp đang mở và chúng không được đóng. Có thể có khả năng người dùng đã quên đóng các tệp đang mở
Cách quản lý tài nguyên bằng Trình quản lý ngữ cảnh
Thật khó để đóng một tệp ở mọi nơi nếu khối chương trình đưa ra một ngoại lệ hoặc có bất kỳ thuật toán phức tạp nào với nhiều đường dẫn trả về
Hầu hết thời gian, người dùng sử dụng "try-ngoại trừ cuối cùng" trong các ngôn ngữ lập trình khác khi làm việc với tệp để đảm bảo rằng tài nguyên tệp được đóng sau khi sử dụng, ngay cả khi có ngoại lệ. Nhưng trong Python, họ có thể sử dụng "Trình quản lý ngữ cảnh" để quản lý tài nguyên. Người dùng có thể sử dụng từ khóa "with". Khi nó được đánh giá, nó sẽ dẫn đến một đối tượng có thể thực hiện quản lý bối cảnh. Chúng ta có thể viết các trình quản lý ngữ cảnh bằng cách sử dụng các lớp hoặc hàm với các trình trang trí
Cách tạo Trình quản lý bối cảnh
Khi người dùng tạo trình quản lý bối cảnh, họ cần đảm bảo rằng lớp đó có các phương thức sau. __enter__[] và __exit__[]
Phương thức __enter__[] sẽ trả về tài nguyên cần quản lý
Phương thức __exit__[] sẽ không trả về bất cứ thứ gì ngoài việc thực hiện các thao tác dọn dẹp
Hãy xem một ví dụ
- Đầu tiên, chúng ta sẽ tạo một lớp đơn giản có tên "context_manager" để hiểu cấu trúc cơ bản của việc tạo trình quản lý bối cảnh bằng cách sử dụng phương thức lớp
Ví dụ
đầu ra
The 'init' method is called The 'enter' method is called The 'with' statement is block The 'exit' method is called
Thí dụ -
Trong đoạn mã trên, chúng tôi đã tạo đối tượng "context_manager". Điều đó được gán cho biến sau từ khóa "as", tức là người quản lý. Sau khi chạy chương trình, các phương thức sau được thực hiện theo trình tự
- __int__[]
- __đi vào__[]
- Nội dung câu lệnh, là mã bên trong khối câu lệnh "with"
- __exit__[], Trong phương thức này, các tham số được sử dụng để quản lý các ngoại lệ
Quản lý tệp bằng Trình quản lý ngữ cảnh
Bây giờ, chúng ta sẽ áp dụng khái niệm trên để tạo lớp, lớp này có thể giúp quản lý tài nguyên tệp. Lớp "file_manager" sẽ giúp mở tệp, đọc hoặc ghi nội dung rồi đóng tệp
Ví dụ
đầu ra
Cách thực hiện Quản lý tệp bằng cách sử dụng Trình quản lý ngữ cảnh và Câu lệnh "với"
Sau khi người dùng thực hiện khối câu lệnh "with", các thao tác sẽ được thực hiện theo trình tự sau
- Một đối tượng "file_manager" sẽ được tạo với "text_file. txt" làm tên tệp và "w" [viết] làm chế độ khi phương thức __init__[] sẽ được thực thi
- Phương thức __enter__[] sẽ mở "text_file. txt" trong chế độ ghi và trả về đối tượng "file_manager" cho biến "file"
- Văn bản "JavaTpoint" sẽ được ghi vào tệp
- Phương thức __exit__[] sẽ đảm nhiệm việc đóng tệp sau khi thoát khỏi khối câu lệnh "with", đây là thao tác chia nhỏ
Khi "in [tệp. đã đóng]" chạy, người dùng sẽ nhận được kết quả đầu ra là "True" vì "file_manager" đã đóng tệp, nếu không thì cần phải thực hiện rõ ràng
Cách quản lý kết nối cơ sở dữ liệu bằng Trình quản lý ngữ cảnh
Bây giờ, chúng tôi sẽ trình bày cách tạo một hệ thống quản lý kết nối cơ sở dữ liệu đơn giản. Có một giới hạn trong việc mở số lượng kết nối cơ sở dữ liệu tại một thời điểm, lành mạnh như Bộ mô tả tệp. Do đó, chúng tôi sử dụng trình quản lý bối cảnh, vì nó hữu ích trong việc quản lý các kết nối đến cơ sở dữ liệu vì người dùng có thể quên đóng bộ sưu tập
Cài đặt pymongo
Để quản lý kết nối cơ sở dữ liệu thông qua trình quản lý nội dung, trước tiên người dùng phải cài đặt thư viện "pymongo" bằng cách sử dụng lệnh sau
Ví dụ
đầu ra
Giải trình
Trong đoạn mã trên, sau khi thực hiện khối câu lệnh "with", các thao tác sau sẽ xảy ra theo trình tự
- Đối tượng "mongo_db_connection_manager" sẽ được tạo với "localhost" là "host_name" và cổng bằng "27017", khi phương thức __init__[] được thực thi
- Phương thức __enter__[] sẽ mở kết nối "mongodb" và nó sẽ trả về đối tượng "mongo_db_connection_manager" cho biến "mongo"
- Cơ sở dữ liệu "SampleDB" sẽ truy cập kết nối "thử nghiệm" và tài liệu có "_id = 147" sẽ được truy xuất. Nó sẽ in tên đã lưu của tài liệu
- Phương thức __exit__[] sẽ đảm nhiệm việc đóng tệp sau khi thoát khỏi khối câu lệnh "with", đây là thao tác chia nhỏ
Phần kết luận
Trong hướng dẫn này, chúng ta đã thảo luận về trình quản lý nội dung trong Python, cách tạo Trình quản lý nội dung và cách nó có thể trợ giúp trong Quản lý tài nguyên, quản lý tệp và quản lý các kết nối Cơ sở dữ liệu