Форум сайта python.su
Всем доброго дня!
Допустим есть цикл, в котором перебирается 10 объектов с большим интервалом.
При запуске скрипта, он всегда начинается с первой позиции. Как проще всего организовать продолжение выполнения цикла, после перезапуска скрипта? Думал сохранять в файл, но может есть способы проще?
Офлайн
Как вариант, сделать класс, в котором будет атрибут-счетчик и сериализовать объект этого класса по выходу из программы.
Офлайн
Спасибо! Но я до классов еще не дорос…
Офлайн
Проще способов нет. Вам в любом случае нужно сохранять это число во внешнем хранилище. А уж в каком виде и что это будет за хранилище - решать вам.
Офлайн
Как то так, доработай напильником
import pickle,os,time file_name='/home/smirnov/dump.dmp' class CycleWithCounter(object): def __init__(self, func, *args, **kw): self.counter=0 self.func=func self.args=args self.kw=kw def __iter__(self): for i in self.func(self.counter, *self.args, **self.kw): self.counter+=1 yield i file=open(file_name,'w') pickle.dump(self, file) file.close() def foo(start,*args, **kw): for a in args[start:]: yield a time.sleep(5) if not os.path.exists(file_name): c_w_c=CycleWithCounter(foo, 1,2,3,4,5,6,7) else: file=open(file_name,'r') c_w_c=pickle.load(file) file.close() for i in c_w_c: print i os.remove(file_name)
1 2 ^CTraceback (most recent call last): File "test.py", line 47, in <module> for i in c_w_c: File "test.py", line 26, in __iter__ for i in self.func(self.counter, *self.args, **self.kw): File "test.py", line 37, in foo time.sleep(5) KeyboardInterrupt
3 4 5 6 7
Офлайн
Seganapaсохрани в файл номер позиции
При запуске скрипта, он всегда начинается с первой позиции. Как проще всего организовать продолжение выполнения цикла, после перезапуска скрипта?
Офлайн
py.user.next
сохрани в файл номер позиции
while 1: print time.strftime("%a, %d %b %Y %H:%M:%S +0000", time.localtime(time.time())) attack (52044) print time.strftime("%a, %d %b %Y %H:%M:%S +0000", time.localtime(time.time())) attack (51947) print time.strftime("%a, %d %b %Y %H:%M:%S +0000", time.localtime(time.time())) attack (51685) print time.strftime("%a, %d %b %Y %H:%M:%S +0000", time.localtime(time.time())) attack (51975)
Отредактировано Seganapa (Сен. 12, 2012 08:16:48)
Офлайн
Seganapaзагрузить число из файла в переменную
А как потом начать выполнение цикла (While) с этой позиции?
N = 10 i = load() while i < N: process(obj[i]) i += 1 save(i)
Отредактировано py.user.next (Сен. 12, 2012 09:17:51)
Офлайн
Спасибо!
Но я что-то никак догнать не могу как мне далее сделать бесконечный цикл
def tor(name): print 'Значение', name names = ['Joe', 'Bill', 'Sara'] i=2 while 1: while i<len(names): tor(names[i]) i+=1
Офлайн
Спасибо!
Но я что-то никак догнать не могу как мне далее сделать бесконечный цикл
def tor(name): print 'Значение', name names = ['Joe', 'Bill', 'Sara'] i=2 while i<len(names): tor(names[i]) i+=1
Офлайн