threading.Event() используется для сигнализации между потоками.
.set(): Устанавливает внутренний флаг события в True, разблокируя все ожидающие потоки..clear(): Сбрасывает флаг в False, блокируя последующие .wait() вызовы..wait([timeout]): Блокирует поток, пока флаг не станет True (или истечет таймаут).threading.Event() - это простой способ сигнализировать между потоками в Python. Он позволяет одному или нескольким потокам ждать, пока другой поток не установит флаг события.
Основные методы:
Event(): Конструктор, создает объект события. Изначально внутренний флаг установлен в False.set(): Устанавливает внутренний флаг события в True. Все потоки, которые ожидают события (через wait()), будут разблокированы.clear(): Сбрасывает внутренний флаг события в False. Потоки, ожидающие события, будут заблокированы, пока флаг снова не будет установлен.wait(timeout=None): Блокирует вызывающий поток до тех пор, пока внутренний флаг события не станет True или не истечет необязательный тайм-аут. Возвращает True, если событие было установлено до истечения тайм-аута, и False в противном случае. Если тайм-аут не указан, поток блокируется бесконечно.is_set(): Возвращает True, если внутренний флаг установлен, и False в противном случае.Пример использования:
import threading
import time
def worker(event, worker_id):
print(f"Поток {worker_id}: Жду события...")
event.wait() # Блокирует поток до тех пор, пока event.set() не будет вызван
print(f"Поток {worker_id}: Событие произошло! Продолжаю работу...")
def main():
event = threading.Event()
# Создаем и запускаем несколько потоков-работников
threads = []
for i in range(3):
thread = threading.Thread(target=worker, args=(event, i))
threads.append(thread)
thread.start()
# Ждем немного времени
time.sleep(2)
# Устанавливаем событие
print("Основной поток: Устанавливаю событие...")
event.set() # Разблокирует все потоки, ждущие события
# Ждем завершения потоков
for thread in threads:
thread.join()
print("Основной поток: Все потоки завершили работу.")
if __name__ == "__main__":
main()
Описание примера:
worker представляет поток, который ждет установки события с помощью event.wait().Event и запускает несколько потоков-работников.event.set(), чтобы установить событие.thread.join().Применение:
threading.Event() полезен в ситуациях, когда один или несколько потоков должны ожидать определенного события, прежде чем продолжить свою работу. Например:
В целом, threading.Event() - это простой и эффективный способ синхронизации потоков в Python, особенно когда требуется односторонняя сигнализация (один поток сигнализирует другим).