Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

lab_3 / signal_labos

.py
Скачиваний:
1
Добавлен:
12.02.2024
Размер:
2.36 Кб
Скачать
#!/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