Здесь много путаницы, которая затрудняет ответ на этот вопрос:
- Требование ipython.Почему вам нужно обрабатывать такие большие файлы данных из ipython вместо автономного скрипта?
- RAM-диск tmpfs.Я читаю ваш вопрос как подразумевающий, что вы читаете все свои входные данные в память сразу в Python.Если это так, то python выделяет свои собственные буферы для хранения всех данных в любом случае, а файловая система tmpfs дает вам выигрыш в производительности, только если вы многократно перезагружаете данные с RAM-диска.
- УпоминаниеIncPy.Если ваши проблемы с производительностью вы можете решить с помощью заметок, почему вы не можете просто реализовать памятку для тех функций, где это больше всего поможет?
Итак.Если вам действительно нужны все данные в памяти одновременно - например, если ваш алгоритм повторно обрабатывает весь набор данных несколько раз - я бы посоветовал взглянуть на модуль mmap
.Это предоставит данные в виде необработанных байтов вместо unicode
объектов, что может повлечь за собой немного больше работы в вашем алгоритме (например, при работе с закодированными данными), но будет использовать разумный объем памяти.Для одновременного считывания данных в объекты Python unicode
потребуется в 2 или 4 раза больше оперативной памяти, чем она занимает на диске (при условии, что данные имеют формат UTF-8).
Если ваш алгоритм просто выполняет одну линейную операциюПередав данные (как и алгоритм Aho-Corasick, о котором вы упомянули), вам будет гораздо удобнее просто читать по кусочкам разумного размера:
with codecs.open(inpath, encoding='utf-8') as f:
data = f.read(8192)
while data:
process(data)
data = f.read(8192)
Надеюсь, это по крайней мере получитты ближе.