Python threading.Condition.wait () приостанавливает выполнение немедленно? - PullRequest
0 голосов
/ 10 августа 2011

Если я вызову wait() для переменной условия Python, вызывает ли вызывающий поток приостановку выполнения и выдачу или он продолжает блокироваться до следующего переключения контекста?

Ответы [ 2 ]

2 голосов
/ 10 августа 2011

Нить действительно уступает.Это приводит к реализации pthread_cond_wait или эквивалентного механизма подвески в PyThread_acquire_lock.Поскольку переменная условия реализована с использованием интерфейса системных вызовов, а Python использует собственные потоки, планировщик операционной системы отвечает за переключение на другой поток.

Кроме того, GIL перед вызовом освобождаетсяэто глубоко во внутренностях Python.Наконец, последний кусочек головоломки - это призыв получить замок в threading.Condition.wait.

1 голос
/ 10 августа 2011

Метод wait () снимает блокировку, а затем блокирует ее до тех пор, пока она не будет разбужена вызовом notify () или notifyAll () для той же переменной условия в другом потоке.После пробуждения он снова получает замок и возвращается.Также можно указать время ожидания.

Блокируется до уведомления о состоянии.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...