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