Найти в Дзене

Программирование на Python. Многозадачность. Потоки. Threading. Синхронизация с помощью событий. Класс Event

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

Многозадачность в Python | programmer's notes (python and more) | Дзен
Стандартные библиотеки Python | programmer's notes (python and more) | Дзен

Статья является продолжением статей по многозадачности потоков с использованием библиотеки threading. См. также

Синхронизация потоков с помощью класса Event

Сегодня рассмотрим ещё один механизм, используемый для синхронизации потоков. Этот механизм основан на классе Event.

Мы посвятим классу Event еще один текст, с подробным описанием методов, так что пока опишем чисто практическое применение.

Событие (объект класса Event) может находится в двух состояниях: True и False. При создании состояние равно False. Перевести событие в состояние True можно методом set(). Метод wait() ждёт, когда состояние события стане True. Наконец, проверку можно осуществить методом is_set(), который возвращает состояние события. Методом же clear() перевести событие снова в состояние False. Вот так кратко работает весь механизм. Кстати весьма простой механизм.

В следующей программе кроме главного, есть ещё три потока. Также создаётся два события. В начале главный поток выдаёт потоку thrm разрешение. В свою очередь этот поток даёт разрешение потокам thr1 и thr2. Вот такая двухступенчатая схема.

Текст программы см. ниже
Текст программы см. ниже
primer117.py

Результат работы программы

Поток 1 в ожидании
Поток 2 в ожидании
Ждём распоряжения свыше
Ждём распоряжения свыше
Ждём распоряжения свыше
Главный поток дал добро
Поток 1 заканчивает работу
Поток 2 заканчивает работу
Конец работы главного потока

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

Мы с вами всего лишь поток в многозадачной программе, написанной Богом
Мы с вами всего лишь поток в многозадачной программе, написанной Богом