Как зациклить скрипт с интервалом.

Рейтинг: 1Ответов: 2Опубликовано: 18.01.2015

Пример:

#!/usr/bin/python

from gi.repository import GLib as glib

def qwe():
    print 1
    glib.timeout_add_seconds(5, qwe)

qwe()

Запускаю скрипт, он пишет один раз в консоль и все.

Ответы

▲ 2Принят

Самое простое - оформить это в

while True:
    qwe()

Но тогда будет бесконечно. Если нужно определённое количество раз, то

for i in range(10):
    qwe()

Извините за оформление, с телефона не удобно.

Интервал можно задать через time sleep()

▲ 1

Нужно запустить event loop:

#!/usr/bin/env python
from gi.repository import GLib, GObject

def qwe():
    print(1)
    GLib.timeout_add_seconds(5, qwe)

qwe()
try:
    GObject.MainLoop().run()
except KeyboardInterrupt: # got Ctrl-C
    pass

Код, основанный на "event loop", позволяет несколько функций исполнять вперемежку, в отличие от while True цикла, который блокирует весь поток:

#!/usr/bin/env python
import time
from time import time as timer

interval = 5
while True:
    time.sleep(interval - timer() % interval)
    print(1)

Оба подхода применимы, но в разных обстоятельствах.