Tính mức sử dụng bộ nhớ trong Python

Sử dụng phương thức sys.getsizeof[] để lấy mức sử dụng bộ nhớ của một đối tượng, e. g. ________số 8. Phương thức lấy một đối số đối tượng và trả về kích thước của đối tượng theo byte. Tất cả các đối tượng tích hợp có thể được chuyển đến phương thức sys.getsizeof[]

Phương thức trả về kích thước của một đối tượng theo byte

Đối tượng có thể là bất kỳ loại đối tượng nào và tất cả các đối tượng tích hợp đều trả về kết quả chính xác

Kích thước của một đối tượng bao gồm dữ liệu được lưu trữ bởi đối tượng, các thuộc tính, phương thức, v.v.

Phương thức

%memit x = 10+5
#Output
peak memory: 54.01 MiB, increment: 0.27 MiB
0 chỉ chiếm mức tiêu thụ bộ nhớ trực tiếp của đối tượng, không phải mức tiêu thụ bộ nhớ của các đối tượng mà nó đề cập đến

Lưu ý rằng một số đối tượng Python như danh sách và từ điển có thể tham chiếu đến các đối tượng khác và phương thức

%memit x = 10+5
#Output
peak memory: 54.01 MiB, increment: 0.27 MiB
0 không tính đến điều đó

Có một công thức sizeof đệ quy trong các tài liệu chính thức. Nó sử dụng đệ quy

%memit x = 10+5
#Output
peak memory: 54.01 MiB, increment: 0.27 MiB
0 để tìm kích thước của một đối tượng và các đối tượng mà nó tham chiếu

Phương thức

%memit x = 10+5
#Output
peak memory: 54.01 MiB, increment: 0.27 MiB
3 gọi phương thức
%memit x = 10+5
#Output
peak memory: 54.01 MiB, increment: 0.27 MiB
4 của đối tượng, vì vậy nó không xử lý các đối tượng tùy chỉnh không triển khai nó

Bạn cũng có thể nhập trực tiếp phương thức

%memit x = 10+5
#Output
peak memory: 54.01 MiB, increment: 0.27 MiB
0 thay vì nhập toàn bộ mô-đun
%memit x = 10+5
#Output
peak memory: 54.01 MiB, increment: 0.27 MiB
6

Kích thước của một đối tượng phụ thuộc vào việc thực hiện. Các hương vị khác nhau của Python có thể sử dụng các cấu trúc dữ liệu nội bộ khác nhau, điều đó có nghĩa là chúng sẽ tạo ra các kết quả khác nhau

Phương thức sys.getsizeof[] nhận một đối số thứ hai tùy chọn - một giá trị mặc định để trả về nếu đối tượng không cung cấp phương tiện để truy xuất kích thước

Các nhà phát triển Python nên biết về mức tiêu thụ bộ nhớ của mã họ đang viết. Điều này sẽ giúp theo nhiều cách. Có thể là quyết định phần cứng hoặc quyết định nhu cầu tối ưu hóa hoặc tìm rò rỉ bộ nhớ, v.v.

Chúng ta sẽ thảo luận về một thư viện python rất đơn giản nhưng rất hữu ích memory_profiler

pip install memory_profiler#Load its magic function
%load_ext memory_profiler
from memory_profiler import profile

Chúng ta có thể hình dung việc sử dụng memory profiler theo các cách sau.
1. Tìm mức tiêu thụ bộ nhớ của một dòng
2. Tìm mức tiêu thụ bộ nhớ của một hàm
3. Tìm mức tiêu thụ bộ nhớ của một dòng chức năng theo dòng
4. Tìm mức tiêu thụ bộ nhớ của tập lệnh python hoàn chỉnh

Hiện nay. hãy thảo luận về tất cả các tình huống này

  1. Tìm mức tiêu thụ bộ nhớ của một dòng

Chỉ cần thêm chức năng ma thuật %memit ở đầu dòng

%memit x = 10+5
#Output
peak memory: 54.01 MiB, increment: 0.27 MiB

Ở đây, bộ nhớ cao nhất là bộ nhớ được sử dụng bởi quá trình chạy mã này. Phần tăng không là gì ngoài bộ nhớ được yêu cầu/tiêu thụ do việc bổ sung dòng mã này. Logic tương tự này cũng áp dụng cho các tùy chọn bên dưới

2. Tìm mức tiêu thụ bộ nhớ của một chức năng

Thêm chức năng ma thuật ở đầu dòng từ nơi chức năng được gọi

def addition[]:
a = [1] * [10 ** 1]
b = [2] * [3 * 10 ** 2]
sum = a+b
return sum%memit addition[]
#Output
peak memory: 36.36 MiB, increment: 0.01 MiB

3. Tìm mức tiêu thụ bộ nhớ của một dòng chức năng theo dòng

Để mô tả từng dòng về việc sử dụng bộ nhớ, chúng ta có thể sử dụng trình trang trí @profile. Thật không may, điều này chỉ hoạt động đối với các chức năng được xác định trong các mô-đun riêng biệt chứ không phải chính sổ ghi chép, vì vậy chúng tôi sẽ bắt đầu bằng cách sử dụng ma thuật %%file để tạo một mô-đun đơn giản có tên demo. py, chứa chức năng của chúng tôi

%%file demo.py
from memory_profiler import profile
@profile
def addition[]:
a = [1] * [10 ** 1]
b = [2] * [3 * 10 ** 2]
sum = a+b
return sum

Bây giờ, hãy gọi hàm giống như trong tùy chọn 2

from demo import addition
%memit addition[]#Output
Line # Mem usage Increment Line Contents
================================================
2 36.4 MiB 36.4 MiB @profile
3 def addition[]:
4 36.4 MiB 0.0 MiB a = [1] * [10 ** 1]
5 3851.1 MiB 3814.7 MiB b = [2] * [3 * 10 ** 2]
6 7665.9 MiB 3814.8 MiB sum = a+b
7 7665.9 MiB 0.0 MiB return sum
peak memory: 7665.88 MiB, increment: 7629.52 MiB

4. Tìm mức tiêu thụ bộ nhớ của tập lệnh python hoàn chỉnh

Không thể thử tùy chọn này trong sổ ghi chép. Chúng ta phải tạo một tập lệnh python và chạy nó thông qua dòng lệnh

#create script.py
import time@profile
def function1[]:
n = 100000
a = [1] * n
time.sleep[1]
return a@profile
def function2[]:
n = 200000
b = [1] * n
time.sleep[1]
return bif __name__ == "__main__":
function1[]
function2[]

Sau đó chạy script và xem cốt truyện

#On command line
mprof run script.py
#To generate plot
mprof plot

Chúng ta có thể thấy biểu đồ tiêu thụ bộ nhớ v/s thời gian

thời gian so với ký ức

Xin lưu ý rằng không cần thiết phải đặt trình trang trí @profile trên chức năng, nếu chúng tôi không giữ nó, chúng tôi sẽ không thấy mức tiêu thụ bộ nhớ cấp chức năng nhưng chúng tôi sẽ thấy mức tiêu thụ của toàn bộ tập lệnh

Làm cách nào để kiểm tra mức sử dụng bộ nhớ trong Python?

Làm việc với Python Memory Profiler . 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. putting the @profile decorator around any function or method and running python -m memory_profiler myscript. You'll see line-by-line memory usage once your script exits.

Sử dụng bộ nhớ trong Python là gì?

Sử dụng bộ nhớ. Mức sử dụng bộ nhớ của trình thông dịch Python sau mỗi lần thực thi dòng . Tăng. Sự khác biệt về mức tiêu thụ bộ nhớ từ dòng hiện tại đến dòng cuối cùng. Về cơ bản, nó biểu thị bộ nhớ được sử dụng bởi một dòng mã Python cụ thể. lần xuất hiện. Số lần một dòng mã cụ thể được thực thi.

Bao nhiêu bộ nhớ là một đối tượng sử dụng Python?

Khi bạn tạo một đối tượng danh sách, đối tượng danh sách tự chiếm 64 byte bộ nhớ và mỗi mục sẽ thêm 8 byte bộ nhớ vào .

Chủ Đề