Если я вызову wait() для переменной условия Python, вызывает ли вызывающий поток приостановку выполнения и выдачу или он продолжает блокироваться до следующего переключения контекста?
wait()
Нить действительно уступает.Это приводит к реализации pthread_cond_wait или эквивалентного механизма подвески в PyThread_acquire_lock.Поскольку переменная условия реализована с использованием интерфейса системных вызовов, а Python использует собственные потоки, планировщик операционной системы отвечает за переключение на другой поток.
pthread_cond_wait
PyThread_acquire_lock
Кроме того, GIL перед вызовом освобождаетсяэто глубоко во внутренностях Python.Наконец, последний кусочек головоломки - это призыв получить замок в threading.Condition.wait.
threading.Condition.wait
Метод wait () снимает блокировку, а затем блокирует ее до тех пор, пока она не будет разбужена вызовом notify () или notifyAll () для той же переменной условия в другом потоке.После пробуждения он снова получает замок и возвращается.Также можно указать время ожидания.
Блокируется до уведомления о состоянии.