Добавил:
Vanomaj
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:lab_3 / signal_labos
.py#!/usr/bin/env python3
import signal
import os
import random
import time
import threading
# Функция-обработчик сигнала
def handle_signal(signum, frame):
if signum == signal.SIGUSR1:
print("Получен сигнал: Превышено значение температуры!")
elif signum == signal.SIGUSR2:
print("Получен сигнал: Превышено значение влажности!")
elif signum == signal.SIGALRM:
print("Получен сигнал: Превышено значение освещенности!")
elif signum == signal.SIGINT:
print("\nПрограмма завершена по сигналу SIGINT")
os._exit(0)
# Устанавливаем обработчики сигналов
signal.signal(signal.SIGUSR1, handle_signal)
signal.signal(signal.SIGUSR2, handle_signal)
signal.signal(signal.SIGALRM, handle_signal)
signal.signal(signal.SIGINT, handle_signal)
# Эмуляция работы датчиков
def simulate_sensor():
while True:
time.sleep(3)
# Генерация случайных значений температуры, влажности и освещенности
temperature = random.randint(20, 35)
humidity = random.randint(30, 70)
light = random.randint(500, 1000)
# Пороговые значения для температуры, влажности и освещенности
threshold_temperature = 30
threshold_humidity = 60
threshold_light = 800
# Проверка значений и отправка сигналов, если порог превышен
if temperature > threshold_temperature:
os.kill(os.getpid(), signal.SIGUSR1)
if humidity < threshold_humidity:
os.kill(os.getpid(), signal.SIGUSR2)
if light > threshold_light:
os.kill(os.getpid(), signal.SIGALRM)
# Запуск эмуляции работы датчиков в отдельном потоке
sensor_thread = threading.Thread(target=simulate_sensor)
sensor_thread.start()
# Ожидание завершения работы потока (в данном случае бесконечный цикл, поэтому программа работает)
sensor_thread.join()
Соседние файлы в папке lab_3