2014-12-09 3 views
2

ниже код является частью моей главной функцииИмея трудоемкий объект в памяти

def main(): 
    model = GoodPackage.load_file_format('hello.bin', binary=True) 
    do_stuff_with_model(model) 

def do_stuff_with_model(model): 
    do something~ 

Предположим, что размер hello.bin составляет несколько гигабайт, и это занимает некоторое время, чтобы загрузить его. метод do_stuff_with_model по-прежнему нестабилен, и я должен сделать много итераций, пока у меня не будет стабильной версии. Другими словами, я должен выполнить основную функцию много раз, чтобы завершить отладку. Однако, так как для загрузки модели каждый раз, когда я запускаю код, требуется несколько минут, это требует много времени. Есть ли способ сохранить объект модели в каком-то другом месте, так что каждый раз, когда я запускаю код, набрав в консоли python my_code.py, мне не нужно ждать? Я предполагаю, что использование pickle не поможет ни потому, что файл по-прежнему будет большим.

+1

Не могли бы вы ** [split] (http://linux.die.net/man/1/split) ** двоичный файл в файл меньшего размера для разбора разработки? –

+0

Это вариант, но есть ли альтернативный способ? Я чувствую, что эта проблема возникает очень часто и хотела бы знать, есть ли хорошее решение. –

+0

Возможно (не очень хорошая идея), вы можете настроить python для автоматического импорта и добавления его в встроенные. Будет еще много времени, но только когда вы откроете python. Или, если возможно, попытайтесь уменьшить модель для целей тестирования. – tox123

ответ

2

Как насчет создания ramdisk? Если у вас достаточно памяти, вы можете сохранить весь файл в ОЗУ. Это резко ускорит работу, хотя вам, вероятно, придется это делать каждый раз, когда вы перезагружаете компьютер.

Создание ramdisk довольно просто на linux. Просто создайте каталог:

mkdir ramdisk 

и смонтировать его как temps или ramfs файловой системы:

mount -t tmpfs -o size=512m tmpfs ./ramdisk 

Оттуда вы можете просто скопировать большой файл на виртуальный диск. Это имеет то преимущество, что ваш код остается неизменным, кроме простого изменения пути к вашему большому файлу. Доступ к файлу происходит так же, как обычно, но теперь он намного быстрее, так как он загружает его из ОЗУ.

Смежные вопросы