Программа на второй план
Я делаю программу в которую входит функция будильника, проверка времени выполняется циклом который тормозит работу всей программы (даже компьютер подвисает). Как можно поставить выполнение этой функции на второй план? Может есть какой то другой вариант реализации?
Ответы (1 шт):
Как можно поставить выполнение этой функции на второй план?
Надо просто отказаться от использования такой функции с циклом
Может есть какой то другой вариант реализации?
Да, есть. Это использование сигналов таймера и и обработчиков этих сигналов. Есть множество разных вариантов, как это сделать. Я привожу самый простой. Что бы Вы поняли направление - куда надо смотреть.
Вот простейший варинт программы, реализующей периодический таймер. Т.е. после срабатывания в первый раз, программа не завершает работу, а продолжает выполнение.
#! /usr/bin/python
# signal.signal(signalnum, handler)
# Устанавливает обработчик для сигнала signalnum функцию handler, которая может быть
# вызываемым объектом Python принимающее два аргумента или одним из специальных
# значений: signal.SIG_IGN,signal.SIG_DFL. Возращает предыдущий обработчик сигнала.
#
# В случае многопоточности эта функция может быть вызвана только из основного потока;
# попытка вызова из других потоков вызовет исключение ValueError.
#
# handler вызывается с двумя аргументами: номером сигнала и текущим фреймом стэка
# (None или объект фрейма, смотри модуль inspect и модель данных Python).
#
# На Windows signal() может быть вызван только с значениями SIGABRT, SIGFPE, SIGILL,
# SIGINT, SIGSEGV, SIGTERM, в противном случае будет возбуждено исключение ValueError.
#
import signal, time
def handler(signum, frame):
print('Поступил сигнал Alarm')
signal.alarm(5)
# Задаём функцию - обработчик прерывания по таймеру
signal.signal(signal.SIGALRM, handler)
# Задаём временной интервал таймера:
# Первый раз - через 10 секунд, потом - чере 5
signal.alarm(10)
# Бесконечный цикл ничегонеделанья.
while 1:
time.sleep(1.5)