Python giám sát việc sử dụng RAM như thế nào?
Tìm hiểu lý do tại sao các ứng dụng Python của bạn đang sử dụng quá nhiều bộ nhớ và giảm mức sử dụng RAM của chúng bằng các thủ thuật đơn giản và cấu trúc dữ liệu hiệu quả này Show
Khi nói đến tối ưu hóa hiệu suất, mọi người thường chỉ tập trung vào tốc độ và mức sử dụng CPU. Hiếm khi có ai quan tâm đến mức tiêu thụ bộ nhớ, cho đến khi họ hết RAM. Có nhiều lý do để cố gắng hạn chế sử dụng bộ nhớ, không chỉ tránh việc ứng dụng của bạn bị treo vì lỗi hết bộ nhớ Trong bài viết này, chúng ta sẽ khám phá các kỹ thuật để tìm phần nào trong ứng dụng Python của bạn đang tiêu tốn quá nhiều bộ nhớ, phân tích lý do và cuối cùng là giảm mức tiêu thụ bộ nhớ và dấu chân bằng cách sử dụng các thủ thuật đơn giản và cấu trúc dữ liệu hiệu quả về bộ nhớ Tại sao phiền, Dù sao?Nhưng trước tiên, tại sao bạn phải tiết kiệm RAM? Một lý do đơn giản là tiền. Tài nguyên — cả CPU và RAM — đều tốn tiền, tại sao lại lãng phí bộ nhớ bằng cách chạy các ứng dụng kém hiệu quả, nếu có nhiều cách để giảm dung lượng bộ nhớ? Một lý do khác là quan niệm “dữ liệu có khối lượng”, nếu có nhiều thì nó sẽ di chuyển chậm. Nếu dữ liệu phải được lưu trữ trên đĩa thay vì trong RAM hoặc bộ nhớ cache nhanh, thì sẽ mất một lúc để tải và xử lý, ảnh hưởng đến hiệu suất tổng thể. Do đó, tối ưu hóa cho việc sử dụng bộ nhớ có thể có tác dụng phụ tốt là tăng tốc thời gian chạy ứng dụng Cuối cùng, trong một số trường hợp, hiệu suất có thể được cải thiện bằng cách bổ sung thêm bộ nhớ (nếu hiệu suất của ứng dụng bị giới hạn bởi bộ nhớ), nhưng bạn không thể làm điều đó nếu không còn bộ nhớ nào trên máy Tìm nút cổ chaiRõ ràng là có những lý do chính đáng để giảm mức sử dụng bộ nhớ của các ứng dụng Python của chúng ta, tuy nhiên, trước khi làm điều đó, trước tiên chúng ta cần tìm ra các nút thắt cổ chai hoặc các phần mã đang ngốn hết bộ nhớ Công cụ đầu tiên chúng tôi sẽ giới thiệu là Để bắt đầu sử dụng, chúng tôi cài đặt nó với gói Bây giờ chúng ta đã biết cách thu hẹp tiêu điểm và tìm các dòng cụ thể làm tăng mức tiêu thụ bộ nhớ, chúng ta có thể muốn tìm hiểu sâu hơn một chút và xem mỗi biến đang sử dụng bao nhiêu. Bạn có thể đã thấy Chúng ta có thể thấy rằng với các số nguyên đơn giản, mỗi khi chúng ta vượt qua một ngưỡng, 4 byte sẽ được thêm vào kích thước. Tương tự, với các chuỗi đơn giản, mỗi khi chúng ta thêm một ký tự khác thì một byte bổ sung sẽ được thêm vào. Tuy nhiên, với các danh sách, điều này không theo kịp — Cách tiếp cận tốt hơn là sử dụng công cụ cụ thể được thiết kế để phân tích hành vi bộ nhớ. Một trong số đó là công cụ có thể giúp bạn có ý tưởng thực tế hơn về kích thước đối tượng Python Pympler cung cấp mô-đun Tuy nhiên, Pympler có nhiều tính năng hơn, bao gồm hoặc. Trong trường hợp đây là những thứ có thể cần thiết cho ứng dụng của bạn, thì tôi khuyên bạn nên xem các hướng dẫn có sẵn trong tài liệu Tiết kiệm RAMBây giờ chúng ta đã biết cách tìm kiếm tất cả các loại vấn đề tiềm ẩn về bộ nhớ, chúng ta cần tìm cách khắc phục chúng. Giải pháp tiềm năng, nhanh nhất và dễ dàng nhất có thể là chuyển sang các cấu trúc dữ liệu hiệu quả hơn về bộ nhớ Python Hàm đơn giản ở trên ( Trong ví dụ này, chúng tôi đã sử dụng mô-đun Một nhược điểm lớn của việc sử dụng Nếu bạn định thực hiện nhiều phép toán trên dữ liệu, thì có lẽ bạn nên sử dụng mảng NumPy để thay thế Chúng ta có thể thấy rằng các mảng NumPy cũng hoạt động khá tốt khi sử dụng bộ nhớ với kích thước mảng cao nhất là ~123MiB. Đó là nhiều hơn một chút so với Các tối ưu hóa ở trên giúp với kích thước tổng thể của các mảng giá trị, nhưng chúng ta cũng có thể thực hiện một số cải tiến đối với kích thước của các đối tượng riêng lẻ được xác định bởi các lớp Python. Điều này có thể được thực hiện bằng cách sử dụng thuộc tính lớp Ở đây chúng ta có thể thấy thể hiện của lớp Các mẹo và thủ thuật trên sẽ hữu ích trong việc xử lý các giá trị số cũng như đối tượng Cách dễ nhất để tiết kiệm RAM là không sử dụng nó ngay từ đầu. Rõ ràng là bạn không thể tránh hoàn toàn việc sử dụng RAM, nhưng bạn có thể tránh tải toàn bộ tập dữ liệu cùng một lúc và thay vào đó làm việc với dữ liệu tăng dần nếu có thể. Cách đơn giản nhất để đạt được điều này là sử dụng các trình tạo trả về một trình vòng lặp, tính toán các phần tử theo yêu cầu thay vì tất cả cùng một lúc Công cụ mạnh hơn mà bạn có thể tận dụng là các tệp ánh xạ bộ nhớ, cho phép chúng tôi chỉ tải các phần dữ liệu từ một tệp. Thư viện chuẩn của Python cung cấp mô-đun Tải/đọc tập tin ánh xạ bộ nhớ rất đơn giản. Trước tiên, chúng tôi mở tệp để đọc như chúng tôi thường làm. Sau đó, chúng tôi sử dụng bộ mô tả tệp của tệp ( Hầu hết thời gian, bạn có thể sẽ quan tâm nhiều hơn đến việc đọc tệp như được hiển thị ở trên, nhưng cũng có thể ghi vào tệp ánh xạ bộ nhớ Sự khác biệt đầu tiên trong mã mà bạn sẽ nhận thấy là sự thay đổi trong chế độ truy cập thành Nếu bạn đang tính toán trong NumPy, thì bạn có thể thích các tính năng (tài liệu) Tối ưu ứng dụng là bài toán khó nói chung. Nó cũng phụ thuộc rất nhiều vào nhiệm vụ hiện tại cũng như loại dữ liệu. Trong bài viết này, chúng tôi đã xem xét các cách phổ biến để tìm các vấn đề về sử dụng bộ nhớ và một số tùy chọn để khắc phục chúng. Tuy nhiên, có nhiều cách tiếp cận khác để giảm dung lượng bộ nhớ của một ứng dụng. Điều này bao gồm độ chính xác giao dịch cho không gian lưu trữ bằng cách sử dụng cấu trúc dữ liệu xác suất như bộ lọc nở hoa hoặc HyperLogLog. Một tùy chọn khác là sử dụng các cấu trúc dữ liệu dạng cây như DAWG hoặc Marissa trie rất hiệu quả trong việc lưu trữ dữ liệu chuỗi Python theo dõi việc sử dụng RAM như thế nào?Bạn có thể sử dụng nó bằng cách đặt trình trang trí @profile quanh bất kỳ hàm hoặc phương thức nào và chạy python -m memory_profiler myscript . Bạn sẽ thấy mức sử dụng bộ nhớ theo từng dòng sau khi tập lệnh của bạn thoát.
Python quản lý bộ nhớ của nó như thế nào?Quản lý bộ nhớ trong Python liên quan đến việc quản lý một vùng riêng tư . Heap riêng là một phần bộ nhớ dành riêng cho quy trình Python. Tất cả các đối tượng Python và cấu trúc dữ liệu được lưu trữ trong heap riêng. Hệ điều hành không thể phân bổ phần bộ nhớ này cho một tiến trình khác.
Làm cách nào để kiểm tra kích thước bộ nhớ trong Python?Trong Python, chức năng cơ bản nhất để đo kích thước của một đối tượng trong bộ nhớ là sys. getsizeof() .
Là một mô-đun Python để theo dõi mức tiêu thụ bộ nhớ của chương trình Python?Trình cấu hình bộ nhớ là một mô-đun thuần Python sử dụng mô-đun psutil. Nó theo dõi mức tiêu thụ bộ nhớ của quy trình công việc Python. Ngoài ra, nó thực hiện phân tích từng dòng về mức tiêu thụ bộ nhớ của ứng dụng. |