Найти тему
programmer's notes (python and more)

Программирование на Python. Элементы многозадачности в os. Взаимодействие через сигналы. Приложение 4 к видео 16

Доброго времени суток, читатели, зрители моего канала programmer's notes. Не забывайте подписываться и писать свои комментарии к моим статьям и видео.

А это подборки моих материалов на канале

Приложение 4 к видео (см. Приложение 1, Приложение 2, Приложение 3)

Пример двух дочерних процессов, взаимодействующих посредством сигналов

Сегодня приведу учебный пример использования сигналов при взаимодействии двух дочерних процессов. Для реального взаимодействия, может быть это и не всегда удобно, но в каких-то частных случаях вполне рабочая модель.

Если кратко, то есть родительская программа (процесс), которая запускает два дочерних процессов. Дочерние процессы обмениваются друг с другом сигналами.

Ниже представлена программа - родительский процесс. Он создает два дочерних процесса. Второму дочернему процессу он посылает идентификатор первого дочернего процесса, который уже известен. Далее родительский процесс ожидает, когда оба дочерних процесса заканчивают своё существование.

Родительская программа, текст см. ниже
Родительская программа, текст см. ниже
primer100.py

Ниже представлен первый дочерний процесс. Он создаёт обработчик пользовательского сигнала signal.SIGUSR1. Чтобы узнать идентификатор второго дочернего процесса используется signal.sigwaitinfo. Функция возвращает управление, когда приходит сигнал и возвращает в частности идентификатор процесса, который прислал сигнал. Теперь первый дочерний процесс тоже знает идентификатор второго дочернего процесса.

Первая дочерняя программа (p2.py), текст см. ниже
Первая дочерняя программа (p2.py), текст см. ниже
primer101.py

Второй дочерний процесс получает идентификатор первого дочернего процесса в качестве параметра. Так что он сразу может приступать к посылке сигнала. Но первый сигнал посылается для того, чтобы второй дочерний процесс узнал идентификатор.

Вторая дочерняя программа (p3.py), текст см. ниже
Вторая дочерняя программа (p3.py), текст см. ниже
primer102.py

Оба дочерних процесса периодически посылают сигналы друг друга и сообщают о получении сигнала.

Результат запуска родительской программы

Пришёл сигнал от  21355
Пришёл сигнал от  21354
Пришёл сигнал от  21355
Пришёл сигнал от  21354
Пришёл сигнал от  21355
Пришёл сигнал от  21354
Пришёл сигнал от  21354
Пришёл сигнал от  21355
Пришёл сигнал от  21354
Пришёл сигнал от  21355
Пришёл сигнал от  21354
Пришёл сигнал от  21355
Пришёл сигнал от  21354
Пришёл сигнал от  21355
Пришёл сигнал от  21354
Пришёл сигнал от  21355
Пришёл сигнал от  21354
Пришёл сигнал от  21355
Пришёл сигнал от  21355
Пришёл сигнал от  21354
Дочерние процессы закончили работу

Мы видим при обмене сигнала может быть разное чередования в их получении. Т.е. в одном дочернем процессе могут сработать подряд два сигнала. Но это многозадачность и здесь синхронизацию приходится делать программно.

Хорошего программирования. Оставляйте свои комментарии, не забывайте про лайки и подписывайтесь на мой канал programmer's notes.

Вы подмигиваете мне уже полчаса.Что это значит? В глаз соринка попала.
Вы подмигиваете мне уже полчаса.Что это значит? В глаз соринка попала.