如果我在一个python条件变量上调用wait()
,那么调用线程会暂停执行并返回yield吗?还是一直保持阻塞状态直到下一个上下文切换?Python threading.Condition.wait()是否立即挂起执行?
回答
线程确实屈服。这个收益是由于执行pthread_cond_wait
或PyThread_acquire_lock
中的等效挂起机制。由于条件变量是使用系统调用接口实现的,并且Python使用本地线程,操作系统调度程序负责切换到另一个线程。
此外,GIL is released之前调用这个深入Python的内部。最后,最后一块难题是获取threading.Condition.wait
锁的电话。
等待()方法释放锁,然后阻塞,直到它是 通过通知()或notifyAll的()调用在另一个线程相同的条件下 变量唤醒。一旦被唤醒,它将重新获得锁定并返回 。也可以指定超时。
它阻塞,直到通知条件。
相信与否我实际上是先试着阅读手册。如果它“阻止”执行,为什么我不应该使用自旋锁? –
等待在自旋锁上的线程会烧毁cpu,而等待条件的线程不会烧毁cpu。旋转锁适用于快速锁定和释放锁的情况。条件对于我们不知道等待多久的情况很有用。 –
行,换句话说,线程产量? –
- 1. 立即执行
- 2. 脚本不执行,而是挂起
- 3. PL/SQL DDL执行立即执行
- 4. PostScript立即执行或延期执行
- 5. C#移动操作挂起,而不是立即抛出异常
- 6. 立即执行作业
- 7. performSegueWithIdentifier不会立即执行
- 8. 立即执行DDL语句
- 9. InnerHTML何时立即执行?
- 10. 立即执行ORA-00900
- 11. Openerp Schdular立即执行
- 12. jquery有.on()立即执行
- 13. 执行立即在oracle中
- 14. 立即执行setTimeout回调
- 15. 立即执行多个shell_exec?
- 16. 是否需要PL SQL查询[执行立即]
- 17. 量角器执行挂起
- 18. PDO执行语句挂起
- 19. session.save()是否立即插入?
- 20. 立即通过python运行多个可执行文件
- 21. 使用执行立即插入一行
- 22. python popen.stdout.readline()挂起
- 23. Python瓶挂起
- 24. python thread.join()挂起
- 25. 在Python 2.7中立即停止线程执行/终止
- 26. Python的字典/ OrderedDict:赋值函数,而不立即执行它
- 27. 执行Python代码后图表立即消失
- 28. 搬运工容器python脚本执行后立即退出
- 29. 如何在Microsoft Windows中执行时立即停止Python关闭
- 30. geth在生成DAG之后立即挂起
我想说这取决于实施。奇怪的CPython线程可能不会,但这只是一个模糊记忆的猜测。 –