Можно ли перебирать список с помощью файла mmap? Дело в том, что список слишком велик (более 3 000 000 предметов). Мне нужно иметь быстрый доступ к этому списку при запуске программы, поэтому я не могу загрузить его в память после запуска программы, потому что это занимает несколько секунд.Перечислить через список с помощью mmap - Python
with open('list','rb') as f:
mmapList = mmap.mmap(f.fileno(), 0, access=mmap.ACCESS_READ) # As far as I'm concerned, now I have the list mapped in a virtual memory.
Теперь, я хочу перебрать этот список.
for a in mmapList
не работает.
EDIT: Единственный способ, которым я знаю, - сохранить элементы списка в виде строк в txt-файле, а затем использовать readline, но мне любопытно, есть ли лучший и быстрый способ.
Как был список сохранен в этот файл? – pbkhrv
@pbkhrv Сохраняется с помощью cPickle, но я могу его изменить. –
Объект mmap выполняет строку (https://docs.python.org/2/library/mmap.html), поэтому использование cPickle для десериализации вашего списка не является вариантом, не загружая сначала все в память. Тем не менее, можно написать простой генератор, так что «для a в mmapList» все равно будет работать, прогрессивно проходя через mmap с помощью readline(). Это поможет решить вашу проблему? – pbkhrv