Доброго времени суток, читатели, зрители моего канала programmer's notes. Не забывайте подписываться и писать свои комментарии к моим статьям и видео.
Статья является продолжением статей по многозадачности потоков с использованием библиотеки threading. См. также
Синхронизация потоков с помощью класса Event
Сегодня рассмотрим ещё один механизм, используемый для синхронизации потоков. Этот механизм основан на классе Event.
Мы посвятим классу Event еще один текст, с подробным описанием методов, так что пока опишем чисто практическое применение.
Событие (объект класса Event) может находится в двух состояниях: True и False. При создании состояние равно False. Перевести событие в состояние True можно методом set(). Метод wait() ждёт, когда состояние события стане True. Наконец, проверку можно осуществить методом is_set(), который возвращает состояние события. Методом же clear() перевести событие снова в состояние False. Вот так кратко работает весь механизм. Кстати весьма простой механизм.
В следующей программе кроме главного, есть ещё три потока. Также создаётся два события. В начале главный поток выдаёт потоку thrm разрешение. В свою очередь этот поток даёт разрешение потокам thr1 и thr2. Вот такая двухступенчатая схема.
Результат работы программы
Поток 1 в ожидании
Поток 2 в ожидании
Ждём распоряжения свыше
Ждём распоряжения свыше
Ждём распоряжения свыше
Главный поток дал добро
Поток 1 заканчивает работу
Поток 2 заканчивает работу
Конец работы главного потока
Хорошего программирования. Оставляйте свои комментарии, не забывайте про лайки и подписывайтесь на мой канал programmer's notes.