내 Python 프로세스가 모든 메모리에 액세스할 수 없는 이유는 무엇입니까?

내 Python 프로세스가 모든 메모리에 액세스할 수 없는 이유는 무엇입니까?

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ä猫

관련 정보