Найти - Пользователи
Полная версия: Сохранение состояния генератора
Начало » Python для новичков » Сохранение состояния генератора
1
gematolog
Допустим наш код что-то делает с генерируемой последовательностью чисел. Процесс это довольно долгий и нам периодически надо выключать компьютер. Но запустив заново, продолжить генерацию с того числа, где остановилась. Конечно можно создавать файл с цифрой и в итоге ее подгружать. Но на более сложных последовательностях это невозможно. Как можно сохранить состояние генератора? Модуль pickle дает только сохранение всей итерации, а это бесконечно большой файл.
Если есть какое-то решение, кроме переписывания кода с нуля?
doza_and
gematolog
Если есть какое-то решение, кроме переписывания кода с нуля?
Вообще без переписывания кода? Нажать волшебную кнопку?
Ну например вместо выключения компа переводить его в режим sleep. Тогда сохранится не только состояние питона но вообще для всех программ.
gematolog
Модуль pickle дает только сохранение всей итерации, а это бесконечно большой файл.
Это непонятно. А как оно в память влезло если он бесконечный? Непонятно что вы делаете. Приведите код.

Есть еще подход. Если у вас долгие вычисления может переписать код на С? Может тогда все за пару минут посчитается.
PEHDOM
gematolog что за генератор генерирует последовательность? у вас его код/алгоритм?
scidam
 class MyGen:
    def __init__(self, state=None):
        if state is None:
            self.state = 0
        else:
            self.state = state
    def __next__(self):
        self.state += 1
        return self.state
g = MyGen(state=1002) 
print(next(g))
print(next(g))

state - можно сохранять стандартным pickle…. Возможно, такой же подход можно адаптировать и под вашу задачу.

В случае с файлом в state можно записать текущее положение, где было закончено чтение файла, а потом использовать seek.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB