Как мне увеличить скорость записи pickle.dump () - PullRequest
0 голосов
/ 12 июля 2020

В настоящее время я хочу сохранить сгенерированный массив объектов в виде файла. Я использую метод pickle.dump () следующим образом:

    if mode == 'local' or mode == 'hpc':
        graph = toolbox.init_regular_network()
        all_record_list = simulation.run_simulation_show_all_process(
            graph, single_iterator_list,
            list_name.split('_')[0])
        if mode == 'hpc':
            f = open('result\Record_list', 'wb')
            pickle.dump(all_record_list, f)     

Поскольку мой массив объектов очень большой, сгенерированные файлы имеют размер> 4G, и для написания требуется много времени, как мне его оптимизировать ? Жду вашей помощи!

1 Ответ

0 голосов
/ 12 июля 2020

Вы можете попробовать изменить протокол на максимально возможное.

pickle.dump(all_record_list, f, protocol=pickle.HIGHEST_PROTOCOL)

Из документов:

Изменено в версии 3.0: Протокол по умолчанию - 3.

Изменено в версии 3.8: Протокол по умолчанию - 4.

...

• Версия протокола 0 является исходным «читаемым человеком» протоколом и обратно совместима с более ранними версиями Python.

• Версия протокола 1 - это старый двоичный формат, который также совместим с более ранними версиями Python.

• Версия протокола 2 была представлена ​​в Python 2.3. Он обеспечивает гораздо более эффективную обработку классов нового стиля. См. PEP 307 для получения информации об улучшениях, внесенных в протокол 2.

• Версия 3 протокола была добавлена ​​в Python 3.0. Он явно поддерживает байтовые объекты и не может быть извлечен Python 2.x. Это был протокол по умолчанию в Python 3.0–3.7.

• Версия 4 протокола была добавлена ​​в Python 3.4. Он добавляет поддержку очень больших объектов, добавление большего количества типов объектов и некоторую оптимизацию формата данных. Это протокол по умолчанию, начинающийся с Python 3.8. См. PEP 3154 для получения информации об улучшениях, внесенных в протокол 4.

• Версия 5 протокола была добавлена ​​в Python 3.8. Он добавляет поддержку внеполосных данных и ускорение внутренних данных. См. PEP 574 для получения информации об улучшениях, внесенных в протокол 5.

Здесь можно найти документы: https://docs.python.org/3/library/pickle.html

...