Межпоточная связь с методом Condition () в Python
Эта статья основана на том, как мы используем метод Condition () для реализации межпоточного взаимодействия, давайте обсудим эту тему ниже -:
Давайте есть краткое обсуждение Inter Thread связи , прежде чем говорить о выполнении условия () для между потоками связи, Когда любой потоком требуется что - то от других они организуют общение между ними, и с этой связью, они будут выполнять их требование. Это означает, что это процесс связи между потоками для любых требований.
Состояние Метод
Можно сказать, что реализация межпотокового взаимодействия с использованием метода condition () - это повышение уровня объекта события, используемого для межпоточного взаимодействия. Здесь Condition представляет собой некоторый тип изменения состояния между потоками, например «отправить уведомление», «получено уведомление». См. Ниже, как создается объект условия: -
Синтаксис:
condition_object = threading.condition ()
В этом сценарии потоки могут ждать этого условия, и как только это условие выполняется, потоки могут изменяться в соответствии с этим условием. Проще говоря, мы можем сказать, что объект условия дал доступ потокам для ожидания, пока другой поток не отправит им уведомление. Объект условия всегда внутренне коррелирован с концепцией блокировки (RLock).
Некоторые из следующих методов класса Condition мы обсудим ниже:
- выпускать()
- приобретать()
- поставить в известность()
- ждать()
- 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() |
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() |
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. А чтобы начать свое путешествие по машинному обучению, присоединяйтесь к курсу Машинное обучение - базовый уровень.