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