Реализация межпоточного взаимодействия с помощью метода Event () в Python

Опубликовано: 12 Апреля, 2022

Здесь мы начнем с основ, что такое межпотоковое общение? Межпоточная коммуникация - это процесс передачи требований между потоками. Проще говоря, иногда от одного потока может потребоваться связь с другим потоком в зависимости от требований. Это считается межпотоковым взаимодействием .

Метод Event (): здесь мы говорим о методе Event () , объект Event рассматривается или рекомендуется как простейший процесс или система связи между любыми потоками. Эта система работает в двух условиях, где объект Event - Enabled означает set () или disabled означает clear () .

Синтаксис:

event_object = threading.Event()

Во внутреннем событии управляет процессом, который будет работать внутри, и его можно установить ( включить ) или очистить ( отключить ) с помощью методов для объектов событий. Если потоки должны быть установлены, тогда все потоки будут выполняться, но если потоки должны быть очищены, то обычно все потоки становятся ждать выполнения.

Пример :

 We take an example to explain how the event method is used in the implementation of inter-thread communication:

Python3

#import modules
import threading
import time
  
if __name__ == "__main__":
  
    # initializing the event object
    event_object = threading.Event()
  
# defining task
def task():
    
    print(" Started thread but waiting for event...")
    event_set = event_object.wait(4)
      
    if event_set:
        print(" received and releasing thread")
    else:
        print(" time is gone...")
  
  
# assigning task
thread1 = threading.Thread(target=task)
  
# starting thread
thread1.start()
  
time.sleep(3)
event_object.set()
print(" setting of event is done")

Выход:

В приведенной выше программе, в которой мы создаем объект события, а затем мы создаем поток и запускаем его, теперь поток устанавливает объект события с помощью метод set () и в функции task (), где поток находится в ожидании состояния, если событие установлено для потока, будет выполняться здесь следующая инструкция, если она не была установлена, тогда программа завершается, но есть инструкция для быть казненным.

Вот несколько общих методов, используемых в классе Event: -

  • Метод clear (): этот метод полностью противоположен методу set () , но этот метод также действует как средство изменения условий, если условие становится ложным, тогда какой поток не запущен или уже находится в ожидании, поэтому они все еще ожидают состояние и не продолжать там выполнение.
  • Метод set (): в методе set () мы использовали его как средство смены условий между потоками, где, если условие будет истинным, то есть много потоков, которые ожидали состояния, в котором они стали, для продолжения своего выполнения.
  • Метод isSet (): Этот метод isSet () имеет значение, поскольку, как следует из их названия, установлено , этот метод упрощает то, что следующее событие, которое мы создали, установлено или не установлено .
  • Метод wait (time): Чтобы описать метод wait () простыми словами, мы можем сказать, что поток ждет, пока выполнение метода set () не будет завершено. Мы можем использовать в нем время, если мы установим определенное время, тогда выполнение остановится до истечения времени, после чего оно будет выполняться, но set () события остается.

Here we will take a simple example to explain how the above methods are used throughout the entire program:

Python3

# import time module
import time
  
# import threading module
import threading
  
class product:
    
  def buyer(self):
    print("John consumer is wait for product")   
    print("...............")
    event_object.wait()    
    print("got product")       
    
  def seller(self):   
    time.sleep(5)
    print("Tom producer producing items")  
    print("tom goes to retailer")
    event_object.wait()
      
  def retailer(self):
    time.sleep(10)
    print("retailer found that product and directly send to buyer")
    event_object.set()
            
  
# class object      
class_obj = product()
  
# setting event object
if __name__=="__main__":
  event_object = threading.Event()
  
# creating  threads
T1 = threading.Thread(target=class_obj.buyer)
T2 = threading.Thread(target=class_obj.seller)
T3 = threading.Thread(target=class_obj.retailer)
  
# starting threads
T1.start()
T2.start()
T3.start()

Выход:

Это простой пример, объясняющий использование класса event () и его методов в межпотоковом взаимодействии. Здесь мы используем пример покупатель-продавец и розничный торговец, сначала мы импортируем два модуля, которые являются модулем потоковой передачи и модулем времени, затем мы создаем класс product, в котором есть первая функция, которая является покупателем (), которые имеют несколько инструкции. В первом потоке T3 будет выполняться функция retailer (), но T3 будет ждать 10 секунд из-за таймера после этого T2 будет выполняться, но то же самое здесь T2 также должен ждать 5 секунд, после этого теперь T1 будет исполнить для покупателя () Функция в функции покупателя , когда метод ожидания () выполняется , то поток T1 должен ждать , пока событие не будет установлен (), теперь T2 будет выполнять их инструкции , где он также ждать () метод , когда ожидание () выполняется затем поток T2 останавливает их выполнение до тех пор, пока не будет вызван метод set (). Теперь пришло время для потока T3 в этом методе set (), который освобождает весь ожидающий поток от ожидания состояния, и такие потоки, как T2 и T1, продолжают свое выполнение.

Внимание компьютерщик! Укрепите свои основы с помощью базового курса программирования Python и изучите основы.

Для начала подготовьтесь к собеседованию. Расширьте свои концепции структур данных с помощью курса Python DS. А чтобы начать свое путешествие по машинному обучению, присоединяйтесь к курсу Машинное обучение - базовый уровень.