Уведомления

Группа в Telegram: @pythonsu

#1 Июль 1, 2017 02:06:43

gematolog
Зарегистрирован: 2016-11-22
Сообщения: 1
Репутация: +  0  -
Профиль   Отправить e-mail  

Сохранение состояния генератора

Допустим наш код что-то делает с генерируемой последовательностью чисел. Процесс это довольно долгий и нам периодически надо выключать компьютер. Но запустив заново, продолжить генерацию с того числа, где остановилась. Конечно можно создавать файл с цифрой и в итоге ее подгружать. Но на более сложных последовательностях это невозможно. Как можно сохранить состояние генератора? Модуль pickle дает только сохранение всей итерации, а это бесконечно большой файл.
Если есть какое-то решение, кроме переписывания кода с нуля?

Офлайн

#2 Июль 1, 2017 08:30:48

doza_and
От:
Зарегистрирован: 2010-08-15
Сообщения: 4138
Репутация: +  253  -
Профиль   Отправить e-mail  

Сохранение состояния генератора

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

Есть еще подход. Если у вас долгие вычисления может переписать код на С? Может тогда все за пару минут посчитается.



Отредактировано doza_and (Июль 1, 2017 08:32:01)

Офлайн

#3 Июль 2, 2017 16:20:22

PEHDOM
Зарегистрирован: 2016-11-28
Сообщения: 2196
Репутация: +  294  -
Профиль   Отправить e-mail  

Сохранение состояния генератора

gematolog что за генератор генерирует последовательность? у вас его код/алгоритм?



==============================
Помещайте код в теги:
[code python][/code]
Бериегите свое и чужое время.

Офлайн

#4 Июль 3, 2017 09:34:35

scidam
Зарегистрирован: 2016-06-15
Сообщения: 288
Репутация: +  35  -
Профиль   Отправить e-mail  

Сохранение состояния генератора

 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.

Отредактировано scidam (Июль 3, 2017 09:35:46)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version