Python threading.Condition.wait() 是否立即暂停执行?

0 投票
2 回答
1653 浏览
提问于 2025-04-16 23:17

如果我在 Python 的条件变量上调用 wait(),那么调用这个方法的线程会暂停执行并让出控制权吗?还是说它会一直阻塞,直到下一个上下文切换发生?

2 个回答

1

wait() 方法会先释放锁,然后就会停下来,直到其他线程通过 notify() 或 notifyAll() 方法来唤醒它。被唤醒后,它会重新获取锁,然后继续执行。你还可以设置一个超时时间。

它会一直停着,直到条件被通知。

2

线程确实会让步。这个让步是因为使用了 pthread_cond_wait 这个函数,或者在 PyThread_acquire_lock 中的类似暂停机制。条件变量是通过系统调用来实现的,而Python使用的是本地线程,所以操作系统的调度器负责切换到另一个线程。

另外,在深入Python的内部调用之前, 全局解释器锁(GIL)会被释放。最后一个关键点是调用 threading.Condition.wait 来获取锁。

撰写回答