Межпоточная связь с методом Condition () в Python

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

Эта статья основана на том, как мы используем метод Condition () для реализации межпоточного взаимодействия, давайте обсудим эту тему ниже -:

Давайте есть краткое обсуждение Inter Thread связи , прежде чем говорить о выполнении условия () для между потоками связи, Когда любой потоком требуется что - то от других они организуют общение между ними, и с этой связью, они будут выполнять их требование. Это означает, что это процесс связи между потоками для любых требований.

Состояние Метод

Можно сказать, что реализация межпотокового взаимодействия с использованием метода condition () - это повышение уровня объекта события, используемого для межпоточного взаимодействия. Здесь Condition представляет собой некоторый тип изменения состояния между потоками, например «отправить уведомление», «получено уведомление». См. Ниже, как создается объект условия: -

Синтаксис:

 condition_object = threading.condition ()

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

Некоторые из следующих методов класса Condition мы обсудим ниже:

  1. выпускать()
  2. приобретать()
  3. поставить в известность()
  4. ждать()
  5. notifyAll ()

  • Метод release (): когда потребность объекта условия удовлетворяется потоками, мы будем использовать метод release (), который помогает нам освободить объект условия от их задач и внезапно освобождает внутреннюю блокировку, которая была получена потоками.
 Синтаксис: condition_object.release ()
  • Метод Acqua (): когда мы хотим получить или перехватить какой-либо объект условия для межпоточного взаимодействия, мы всегда использовали метод Acqua (). Метод Acqua () является обязательным, когда мы хотим реализовать межпотоковое взаимодействие с использованием класса условий. Когда мы используем этот метод, потоки внезапно получают внутреннюю систему блокировки.
 Синтаксис: condition_object.acquire ()
  • Метод notify (): когда мы хотим отправить уведомление только одному потоку, который находится в состоянии ожидания, мы всегда используем метод notify (). Здесь, если один поток хочет выполнить обновление объекта состояния, используется notify ().
 Синтаксис: condition_object.notify ()
  • Метод wait (time): Метод wait () может использоваться, чтобы заставить поток ждать, пока не будет получено уведомление, а также до истечения заданного времени. Проще говоря, мы можем сказать, что поток должен ждать, пока выполнение метода notify () не будет завершено. Мы можем использовать время в нем, если мы установим определенное время, тогда выполнение остановится до истечения времени, после чего оно будет выполняться, все еще остаются инструкции.
 Синтаксис: condition_object.wait ()
Параметр: Время
  • Метод notifyAll (): здесь метод notifyAll () используется для отправки уведомлений для всех ожидающих потоков. Если все потоки ожидают обновления объекта условия, то будет использоваться notifyAll ().
 Синтаксис: condition_object.notifyAll ()

Теперь давайте рассмотрим простой пример, чтобы показать, как используются методы получения и выпуска и как они работают во всей программе:

Example 1:

Python3

# code
# import modules
  
import threading 
import time
  
obj1= threading.Condition()
  
  
def task ():
  obj1.acquire()
  print("addition of 1 to 10 ")
  add= 0
  for i in range ( 1 , 11 ):
    add = add+i
  print(add)
  obj1.release()
  print("the condition object is releases now")
    
  
t1 = threading.Thread(target = task)
t1.start()
Output
addition of 1 to 10 
55
the condition object is releases now

В приведенном выше примере мы используем методы collect () и release (), которые можно использовать для получения или получения объекта условия и после завершения задач освобождает объект условия. Сначала мы импортируем необходимые модули, а затем мы создаем объект условия, который является obj1, затем мы создаем и запускаем поток t1. В задаче с именем function там, где мы использовали метод Acqua (), из них мы получаем объект условия, а также отсюда запускается внутренняя блокировка потоков. После завершения инструкций, наконец, мы освобождаем объект условия, а также снимается внутренняя блокировка потоков.

Пример 2:

In this example we used other methods to explain how they work through the entire program:-

Python3

# code
  
# import modules
  
import time
from threading import *
import random
  
  
  
class appointment:
    
  def patient(self):
    condition_object.acquire()
    print("patient john waiting for appointment")
    condition_object.wait()   # Thread is in waiting state
    print("successfully got the appointment")
    condition_object.release()
  
  def doctor(self):
    condition_object.acquire()
    print("doctor jarry checking the time for appointment")
    time=0 
    time=random.randint(1,13)
    print("time checked")
    print("oppointed time is {} PM".format(time))
    condition_object.notify()
    condition_object.release()
  
    
condition_object = Condition()
class_obj=appointment()
  
T1 = Thread(target=class_obj.patient)
  
T2 = Thread(target=class_obj.doctor)
  
T1.start()
  
T2.start()
Output
patient john waiting for appointment
doctor jarry checking the time for appointment
time checked
oppointed time is 4 PM
successfully got the appointment

Это простой пример, объясняющий использование класса Condition () и их методов в потоковой передаче. Кроме того, здесь мы используем пример пациента и врача, как пациент и врач сначала получают условия, а затем как их уведомить, и, наконец, оба также освобождают объект состояния. Давайте начнем сначала, мы создадим назначение класса, которое имело две функции с именами пациент () и доктор (), а затем мы создали два потока T1 и T2 . С помощью метода collect () и врач, и пациент получают объект состояния в своем первом операторе, при этом оба потока внутренне заблокированы. Теперь пациенту нужно дождаться приема, и его назначили после выполнения метода wait (). Доктор начинает проверять, можно ли в выбранное им время пойти на прием или нет, и когда время будет выбрано врачом, тогда он уведомит поток, ожидающий состояния, методом notify () . Затем после метода notify () пациент получил уведомление и продукт. Затем, после всего этого, оба потока освобождают объект условия с помощью метода release () и освобождают внутреннюю блокировку.

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

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