Trình quản lý bối cảnh Python là gì?

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

Sự khác biệt giữa trình quản lý ngữ cảnh và trình trang trí trong Python là gì?

trình quản lý bối cảnh là các đối tượng được sử dụng với python với từ khóa. Nó chạy mã khi vào khối và thoát khỏi khối. decorators là những sửa đổi đối với một hàm hoặc định nghĩa lớp. Nó chạy mã thay thế chức năng như nó đang được xác định

Lợi thế của trình quản lý bối cảnh là gì?

Chúng cho phép bạn cung cấp và sử dụng lại mã thiết lập và chia nhỏ phổ biến . Nói cách khác, với trình quản lý ngữ cảnh, bạn có thể thực hiện bất kỳ cặp thao tác nào cần thực hiện trước và sau một thao tác hoặc quy trình khác, chẳng hạn như. Mở và đóng. Khóa và phát hành.

Làm cách nào để triển khai trình quản lý ngữ cảnh Python?

Trong phương pháp này, có 5 bước để triển khai trình quản lý ngữ cảnh của riêng bạn. .
Xác định một chức năng
(tùy chọn) Viết bất kỳ mã thiết lập nào mà ngữ cảnh của bạn cần
Sử dụng từ khóa năng suất
(tùy chọn) Viết bất kỳ mã phân tích nào mà ngữ cảnh của bạn cần
Thêm @contextlib. trình trang trí contextmanager

Trình quản lý bối cảnh trang trí Python là gì?

Decorators là công cụ rất mạnh và hữu ích trong Python vì nó cho phép lập trình viên sửa đổi hành vi của hàm hoặc lớp . Trình trang trí cho phép chúng tôi bọc một chức năng khác để mở rộng hành vi của chức năng được bọc mà không sửa đổi vĩnh viễn nó.