Запуск функции каждые X минут-Python
Я использую Python и PyGTK. Мне интересно запустить определенную функцию, которая получает данные из последовательного порта и сохраняет их каждые несколько минут.
В настоящее время я использую функцию sleep() в библиотеке времени. Чтобы иметь возможность выполнять обработку, у меня есть моя система настроена следующим образом:
import time
waittime = 300 # 5 minutes
while(1):
time1 = time.time()
readserial() # Read data from serial port
processing() # Do stuff with serial data, including dumping it to a file
time2 = time.time()
processingtime = time2 - time1
sleeptime = waittime - processingtime
time.sleep(sleeptime)
Эта настройка позволяет мне иметь 5-минутные интервалы между считыванием данных из последовательного порта. Моя проблема в том, что я хотел бы иметь функцию readserial() приостановите все, что происходит каждые 5 минут, и будьте в состоянии делать все время, а не использовать время.сна (функция).
есть предложения, как решить эту проблему? Многопоточность? Прерывает? Пожалуйста, имейте в виду, что я использую python.
спасибо.
4 ответов
Не используйте такой цикл со сном, он заблокирует gtk от обработки любых событий пользовательского интерфейса, вместо этого используйте таймер gtk, например
def my_timer(*args):
return True# do ur work here, but not for long
gtk.timeout_add(60*1000, my_timer) # call every min
именно так мой ответ здесь
Если время не критично, чтобы быть точным до десятой секунды, используйте
glib.timeout_add_seconds(60, ..)
else, как указано выше.
timeout_add_seconds позволяет системе выравнивать тайм-ауты с другими событиями, в долгосрочной перспективе уменьшая пробуждения процессора (особенно, если тайм-аут повторяется) и экономия энергии для планеты(!)
gtk.timeout_add кажется устаревшим, поэтому вы должны использовать
def my_timer(*args):
# Do your work here
return True
gobject.timeout_add( 60*1000, my_timer )