Tôi gặp vấn đề về bộ nhớ mà dường như tôi không hiểu.Giới hạn bộ nhớ 32 bit của Python trên các cửa sổ 64bit
Tôi đang ở trên một cửa sổ 7 máy 64 bit có bộ nhớ 8GB và chạy chương trình python 32 bit.
Các chương trình đọc 5.118 tệp nén gọn gàng (npz). Windows thông báo rằng các tập tin mất 1,98 GB trên đĩa
Mỗi tập tin npz chứa hai mẩu dữ liệu: 'arr_0' là loại np.float32 và 'arr_1' là loại np.uint8
Tập lệnh python đọc mỗi tệp nối dữ liệu của chúng vào hai danh sách và sau đó đóng tệp.
Khoảng tập 4284/5118 chương trình ném một MemoryException
Tuy nhiên, công việc quản lý nói rằng việc sử dụng bộ nhớ của python.exe * 32 khi lỗi xảy ra là 1,854,848K ~ = 1.8GB. Ít hơn giới hạn 8 GB của tôi, hoặc giới hạn 4GB của chương trình 32 bit.
Trong chương trình, tôi bắt được lỗi bộ nhớ và báo cáo: Mỗi danh sách có độ dài 4285. Danh sách đầu tiên chứa tổng số 1.928,588,480 float32 ~ = 229,9 MB dữ liệu. Danh sách thứ hai chứa 12.342.966,272 uint8 ~ = 1,471.3MB dữ liệu.
Vì vậy, mọi thứ dường như đang kiểm tra. Ngoại trừ phần tôi bị lỗi bộ nhớ. Tôi hoàn toàn có nhiều bộ nhớ hơn và tệp mà nó gặp phải là ~ 800KB, do đó, nó không thất bại khi đọc một tệp lớn.
Ngoài ra, tệp không bị hỏng. Tôi có thể đọc nó tốt, nếu tôi không sử dụng hết bộ nhớ trước đó.
Để làm cho mọi thứ trở nên khó hiểu hơn, tất cả điều này dường như hoạt động tốt trên máy Linux của tôi (mặc dù nó có bộ nhớ 16GB so với 8GB trên máy Windows của tôi), nhưng vẫn không có vẻ là RAM của máy đang gây ra sự cố này.
Tại sao Python ném lỗi bộ nhớ, khi tôi mong đợi rằng nó có thể phân bổ 2GB dữ liệu khác?
Lượng RAM vật lý bạn có không liên quan. Trên Windows, bạn luôn có trao đổi, cho dù bạn có muốn hay không. – abarnert
Khi điều này hoạt động trên máy linux của bạn ... đó là với một Python 32-bit là tốt? – abarnert
bạn có thể đăng mã bạn đang sử dụng để tải tệp '.npz' không? nếu bạn sử dụng 'np.load (tập tin, mmap_mode = 'r +')' nó sẽ sử dụng ít bộ nhớ hơn, vì với đối số này bạn sẽ mở một ['mảng ánh xạ bộ nhớ'] (http://docs.scipy.org /doc/numpy/reference/generated/numpy.load.html) ... –