Tôi sẽ đăng câu trả lời này như đã được thảo luận trong nhận xét. Tôi đã nhìn thấy nó xuất hiện nhiều lần mà không có câu trả lời được chấp nhận.
Lỗi bộ nhớ trực quan - hết bộ nhớ. Nhưng đôi khi các giải pháp hoặc gỡ lỗi của lỗi này là bực bội vì bạn có đủ bộ nhớ, nhưng lỗi vẫn còn.
1) Kiểm tra các lỗi mã
Đây có thể là một "bước câm" nhưng đó là lý do tại sao nó là đầu tiên. Hãy chắc chắn rằng không có vòng lặp vô hạn hoặc điều mà cố ý sẽ mất một thời gian dài (như sử dụng một cái gì đó module os
rằng sẽ tìm kiếm toàn bộ máy tính của bạn và đưa ra trong một file excel)
2) làm cho mã của bạn hiệu quả hơn
Đi dọc theo các bước của Bước 1. Nhưng nếu một điều đơn giản là mất nhiều thời gian, thường có một mô-đun hoặc cách tốt hơn để làm điều gì đó nhanh hơn và hiệu quả bộ nhớ hơn. Đó là vẻ đẹp của Python và/hoặc ngôn ngữ nguồn mở!
3) Kiểm tra tổng bộ nhớ của đối tượng
Bước đầu tiên là để kiểm tra bộ nhớ của một đối tượng. Có rất nhiều chủ đề trên Stack về điều này, vì vậy bạn có thể tìm kiếm chúng. câu trả lời phổ biến là here và here
để tìm kích thước của một đối tượng trong cắn bạn luôn có thể sử dụng sys.getsizeof()
:
import sys
print(sys.getsizeof(OBEJCT_NAME_HERE))
Bây giờ các lỗi có thể xảy ra trước khi bất cứ điều gì được tạo ra, nhưng nếu bạn đọc csv trong khối bạn có thể thấy dung lượng bộ nhớ đang được sử dụng cho mỗi đoạn.
4) Kiểm tra bộ nhớ khi chạy
Đôi khi bạn có đủ bộ nhớ nhưng các chức năng bạn đang chạy tiêu tốn rất nhiều bộ nhớ khi chạy. Điều này làm cho bộ nhớ tăng đột biến vượt quá kích thước thực tế của đối tượng đã hoàn thành khiến cho mã/quy trình bị lỗi. Kiểm tra bộ nhớ trong thời gian thực là dài nhưng có thể thực hiện được. Ipython là tốt với điều đó. Kiểm tra Their Document.
sử dụng mã dưới đây để xem tài liệu thẳng vào Jupyter Máy tính xách tay:
%mprun?
%memit?
mẫu sử dụng:
%load_ext memory_profiler
def lol(x):
return x
%memit lol(500)
#output --- peak memory: 48.31 MiB, increment: 0.00 MiB
Nếu bạn cần giúp đỡ về chức năng kỳ diệu This is a great post
5) này một có thể là đầu tiên .... nhưng Kiểm tra những điều đơn giản như bit phiên bản
Như trong trường hợp của bạn, việc chuyển đổi đơn giản phiên bản python mà bạn đang chạy đã giải quyết được vấn đề.
Thông thường các bước trên giải quyết được sự cố của tôi.
Bản sao có thể có của http://stackoverflow.com/questions/11622652/large-persistent-dataframe-in-pandas Hãy thử điều đó để tham chiếu –
bạn có đang chạy trình băm 32 bit không? – Jeff
Tôi đọc trong cả hai phiên bản 'csv' và phiên bản' dta'. Cả hai đều làm việc tốt với python/pandas 64 bit 0.13.1. Sử dụng bộ nhớ cao nhất cho tệp 'csv' là 3.33G và đối với' dta' là 3.29G. Đó là quyền trong khu vực nơi một phiên bản 32-bit có khả năng bị nghẹt thở. Vì vậy, câu hỏi của Jeff là rất tốt. –