Linux 서버에 62GB RAM이 있고 Python 코드가 메모리에 20GB 파일을 로드하려고 합니다. 그러나 그것은 산산조각이 났습니다 MemoryError
.
왜 이렇게 되어야 하는지 모르겠습니다.
파일을 점진적으로 로드할 수 있고 이 오류가 완화될 수 있다는 것을 알고 있습니다.
하지만 제 질문은 더 근본적입니다. 사용 가능한 메모리가 너무 많은데도 Python이 이 파일을 메모리에 로드할 수 없는 이유는 무엇입니까?
을 입력하면 가 ulimit
표시됩니다 unlimited
.
ulimit -a
core file size (blocks, -c) 0
data seg size (kbytes, -d) unlimited
scheduling priority (-e) 0
file size (blocks, -f) unlimited
pending signals (-i) 256797
max locked memory (kbytes, -l) 64
max memory size (kbytes, -m) unlimited
open files (-n) 1024
pipe size (512 bytes, -p) 8
POSIX message queues (bytes, -q) 819200
real-time priority (-r) 0
stack size (kbytes, -s) 8192
cpu time (seconds, -t) unlimited
max user processes (-u) 4096
virtual memory (kbytes, -v) unlimited
file locks (-x) unlimited
그렇다면 내 프로세스가 메모리에 액세스할 수 없는 이유는 무엇입니까?
free -mg
:
total used free shared buff/cache available
Mem: 62 1 52 0 8 61
Swap: 31 0 31
def read_from_file(file_name):
with open(file_name, mode='rt', encoding='utf-8') as reader:
text = reader.read()
return text
답변1
20G의 텍스트 데이터가 포함된 텍스트 파일을 읽으려면(인코딩이 utf-8이라고 가정) 데이터를 Python 문자열로 디코딩하기 전에 먼저 파일 내용을 바이너리 청크로 읽어야 합니다.
utf-8_text.txt
다음 4개의 UTF-8 문자(줄 바꿈 없음)로 이름이 지정된 텍스트 파일이 있다고 가정합니다 .
aä猫