Cải thiện bộ nhớ Python của bạn

Tôi đã thử đọc một tệp log nặng 2GB. Tôi đã sử dụng list comprehension. Máy tính của tôi bị treo. Nó đã hết bộ nhớ.

Tôi đã rút ra một bài học. List comprehensions là "eager" (thực thi ngay). Chúng tải mọi thứ cùng một lúc. Generator expressions là "lazy" (trì hoãn). Chúng tải từng mục một.

Hãy sử dụng toán tử walrus (:=). Nó lưu trữ một giá trị cho bạn. Bạn có thể sử dụng giá trị này hai lần trong cùng một dòng. Nó giúp tiết kiệm thời gian CPU. Đừng gọi các hàm tốn kém hai lần nữa.

Đừng bọc các generator trong list() khi sử dụng cho các hàm như sum, max, hoặc min. Điều này thật lãng phí. Generator giúp giữ mức sử dụng bộ nhớ ở mức thấp.

Hãy cẩn thận. Generator chỉ sử dụng được một lần. Chúng sẽ trống rỗng sau một lần duyệt qua. Nếu bạn cần dữ liệu đó một lần nữa, hãy tạo một generator mới hoặc tạo một list.

Viết mã cho các tải trọng thực tế:

  • Sử dụng generator cho các luồng dữ liệu lớn.
  • Sử dụng walrus để giảm tải cho CPU.
  • Hãy nhớ rằng generator sẽ bị cạn kiệt sau khi dùng.

Hãy kiểm tra lại mã của bạn ngay hôm nay. Hãy thay thế list bằng generator.

Source: https://dev.to/timevolt/list-comprehensions-generators-and-the-walrus-what-most-python-devs-overlook-70g