Số nguyên 5 tiêu thụ bao nhiêu bộ nhớ trong Python thuần túy
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 Mặc dù vậy, Pympler có nhiều tính năng hơn, bao gồm theo dõi các thể hiện của lớp hoặc xác định rò rỉ bộ nhớ. 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 lười biếng, 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 Một số nguyên sử dụng bao nhiêu bộ nhớ trong Python?Để an toàn, Python phân bổ một số byte cố định không gian trong bộ nhớ cho mỗi biến thuộc loại số nguyên thông thường, được gọi là int trong Python. Thông thường, một số nguyên chiếm bốn byte hoặc 32 bit .
Một đối tượng Python sử dụng bao nhiêu bộ nhớ?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 .
Một biến chiếm bao nhiêu bộ nhớ trong Python?int z=1; . 001(31 số 0 và một số 1). 4 bytes= 32 bits allocated for z, and the bits are arranged as 00. 001(31 0's and one 1).
Bao nhiêu bộ nhớ được phân bổ cho Python?Python không giới hạn mức sử dụng bộ nhớ trên chương trình của bạn. Nó sẽ phân bổ bộ nhớ nhiều như chương trình của bạn cần cho đến khi máy tính của bạn hết bộ nhớ . Điều bạn có thể làm nhiều nhất là giảm giới hạn xuống giới hạn trên cố định. Điều đó có thể được thực hiện với mô-đun tài nguyên, nhưng đó không phải là thứ bạn đang tìm kiếm. |