import time
from threading import *
import random
class appointment:
def patient(self):
for _ in range(2):
condition_object.acquire()
print('patient john waiting for appointment')
condition_object.notify()
condition_object.wait() # Thread is in waiting state
print('patiend john successfully got the appointment')
condition_object.notify()
condition_object.release()
print('patient john is done')
def doctor(self):
for _ in range(2):
print('doctor in chamber')
condition_object.acquire()
print('doctor jarry checking the time for appointment')
time=0
time=random.randint(1,13)
print('oppointed time is {} PM'.format(time))
condition_object.notify()
print('doctor is going to wait')
condition_object.wait(1.1)
print('doctor is about to leave')
condition_object.release()
print('doctor is done')
condition_object = Condition()
class_obj=appointment()
T1 = Thread(target=class_obj.patient)
T2 = Thread(target=class_obj.doctor)
T1.start()
T2.start()
T1.join()
T2.join()
print("\nEND\n")
Это типичный потоковый код производителя-потребителя. И в конце двух циклов я ожидаю, что когда поток пациента уведомит другой поток и снимет блокировку, ожидающий поток врача проснется. Но ожидающий поток доктора не просыпается (даже если я установил таймер).
Поток врача просыпается, если я использую wait() в конце функции пациента() вместо освобождения, но тогда функция пациента не просыпается после того, как я снимаю блокировку с потока врача. Я действительно смущен.
Почему поток доктора не просыпается после снятия блокировки с другого потока?
И
Почему поток доктора просыпается только после вызова функции wait() из другого потока?