Hướng dẫn optimize memory python - tối ưu hóa bộ nhớ python

Với developer, việc hiểu quản lý bộ nhớ thường ít được nghĩ tới. Tuy nhiên, việc này rất quan trọng trong thực tế. Khi dữ liệu ít, ừ thì việc quản lý bộ nhớ nó không được quan tâm. Nhưng khi dự án phình to, dữ liệu nó nở ra nhiều, việc quản lý bộ nhớ không thể bỏ qua. Cái này cũng dễ hiểu, dữ liệu nhiều mà code không tối ưu được về memory, memory lại không nâng cấp dẫn tới ứng dụng chậm chạp hoặc xử lý sai nếu memory leaks. Nếu nâng memory, nó lại dẫn tới chi phí duy trì hệ thống tăng. Đều là vấn đề bất cập cả.

Nội dung chính ShowShow

  • Best Practices for Efficient Python Code
  • Sử dụng join
  • Tránh sử dụng + để nối các string
  • Sử dụng Generators
  • Đặt evaluations ngoài loop
  • Gán function cho một biến cục bộ
  • Sử dụng built-in functions and libraries
  • Sử dụng itertools thay thế loop
  • Check for performance in Python code

Nội dung chính ShowShowShow

  • Best Practices for Efficient Python Code
  • Sử dụng join
  • Tránh sử dụng + để nối các string
  • Sử dụng Generators
  • Đặt evaluations ngoài loop
  • Gán function cho một biến cục bộ
  • Sử dụng built-in functions and libraries
  • Sử dụng itertools thay thế loop
  • Check for performance in Python code

Nội dung chính ShowShow

Hướng dẫn optimize memory python - tối ưu hóa bộ nhớ python

Đầu tiên, bộ nhớ vật lý sẽ được OS tạo ra một bộ nhớ ảo, nơi mà tất cả các ứng dụng, bao gồm cả Python có thể truy cập. Bộ nhớ ảo đó sẽ có trình bảo lý riêng do hệ diều hành làm chủ. Trình quản lý bộ nhớ OS sẽ cấp một đoạn bộ nhớ cho Python.

Với Python, hầu như việc quản lý bộ nhớ sẽ do Python Memory Manager xử lý.

  • Với Python developer, phần quan trọng nhất của quản lý bộ nhớ là memory allocation. Memory allocation có 2 loại:
  • Static Memory Allocation

Dynamic Memory Allocation

Static Memory Allocation còn được gọi là Compile-time allocation. Nó được áp dụng cho variable static và variable global. Memory cho các variable được cấp phát tại thời điểm compilation.

int *p;
p=new int;
5 được sử dụng để implement static allocation. Trong trường hợp này, memory không thể được sử dụng lại.
static int a=10;

Dynamic Memory Allocation được áp dụng cho variable local, function argumen. Memory cho các variable được cấp phát tại thời điểm runtime.

int *p;
p=new int;
6 được sử dụng để implement dynamic allocation. Trong trường hợp này, memory có thể được giải phóng.
int *p;
p=new int;

Everything in Python is an object.

Đó là điểm hay của Python. Nó có nghĩa, Dynamic Memory Allocation mới chính là nên tảng của Python Memory Management. Khi object không còn cần thiết, Python Memory Management sẽ tự động lấy lại bộ nhớ đã bị object đó chiếm dụng.

Private heap chứa đựng toàn bộ Python objects và data structures. Python memory manager quản lý các private heap theo yêu cầu và developer không có kiểm soát các private heap này. Python memory manager cũng sẽ tương tác với system memory manager để đame bảo có đủ không gian cho private heap.

Python memory manager quản lý các khổi bộ nhớ, chúng được gọi là các

int *p;
p=new int;
7. Các
int *p;
p=new int;
7 cũng size tạo lên
int *p;
p=new int;
9. Các pools được tạo lên trong
mymsg=’line1\n’
mymsg+=’line2\n’
0.
mymsg=’line1\n’
mymsg+=’line2\n’
0 là phần lớn nhất của bộ nhớ và được liên kết trên một ranh giới trang trong bộ nhớ. Một khối bộ nhớ 256kB được phân bổ trên heap = 64 pools. Nếu object không cần thiết nữa, nó sẽ bị hủy và đất chỗ nó chiếm dụng sẽ được Python memory manager lấp đầy bằng một object khác cùng kích thước.

Best Practices for Efficient Python Code

Một điều quan trọng là Python memory manager không nhất thiết giải phóng bộ nhớ từ object bị destroyed trở lại OS. Có thể, nó sẽ trả lại cho python interpreter. Python cũng sẽ có một số lượng nhở các objects allocator được giữa lại để sử dụng thêm.

Sử dụng join

Tránh sử dụng + để nối các string

mymsg=’line1\n’
mymsg+=’line2\n’

Sử dụng Generators

static int a=10;
0

Tránh sử dụng + để nối các string

Sử dụng Generators

static int a=10;
1

Đặt evaluations ngoài loop

static int a=10;
2

Gán function cho một biến cục bộ

Sử dụng built-in functions and libraries

Sử dụng Generators

Đặt evaluations ngoài loop

Gán function cho một biến cục bộ

static int a=10;
4

Đặt evaluations ngoài loop

Gán function cho một biến cục bộ

static int a=10;
5

Gán function cho một biến cục bộ

Sử dụng built-in functions and libraries

static int a=10;
6

Sử dụng built-in functions and libraries

Sử dụng itertools thay thế loop

Gán function cho một biến cục bộ

int *p;
p=new int;
0

Sử dụng Generators

int *p;
p=new int;
1

Sử dụng itertools thay thế loop

Check for performance in Python code

Gán function cho một biến cục bộ

int *p;
p=new int;
2

Sử dụng Generators

int *p;
p=new int;
3

Check for performance in Python code

Nội dung chính ShowShow

int *p;
p=new int;
4

Đầu tiên, bộ nhớ vật lý sẽ được OS tạo ra một bộ nhớ ảo, nơi mà tất cả các ứng dụng, bao gồm cả Python có thể truy cập. Bộ nhớ ảo đó sẽ có trình bảo lý riêng do hệ diều hành làm chủ. Trình quản lý bộ nhớ OS sẽ cấp một đoạn bộ nhớ cho Python.

Với Python, hầu như việc quản lý bộ nhớ sẽ do Python Memory Manager xử lý.

Nguồn: https://towardsdatascience.com/memory-man quản lý-in-python-6bea0c8aecc9