为什么我的 python 进程无法访问所有内存?

为什么我的 python 进程无法访问所有内存?

我的 Linux 服务器中有 62 GB RAM,我的 Python 代码正在尝试在内存中加载 20 GB 文件。然而,却是摔得粉碎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ä猫

相关内容