Python线程模块没有实现真正的并行编程。线程相互切换。那么,信号量是否必要?信号量用于发送信号给其他应该同时处理的线程。我认为它只适用于多处理。为什么线程模块中的Semaphore类?python线程模块中信号量的需求
1
A
回答
0
因为你不能确定,当调度程序将切换线程。考虑SMP机器。它将一直处理一个线程。但是多线程代码应该使用信号量,互斥量,临界区和其他同步原语。
尽管CPython具有GIL并且一次不能执行多个线程,但可以有其他实现,但没有此限制。而且,即使GIL存在,从线程POV开始,所有的线程都在同时运行。你不能写出一些相反的代码(是的,你可以询问OS,但它是一个作弊行为)。
严格地说,信号量不用于向其他线程发送信号,而是用于保护对有限数量资源的访问。例如,您可以有5个打印机和10个要打印的线程。您将有一个Semaphore
初始化值为5
,它将保护您的打印机访问。所以在任何时候,不超过5个线程都会打印一些东西。
又如连接池。例如,你有N个到DB的连接池。这意味着不超过N个线程可以同时对数据库执行查询。在这种情况下,您将有Semaphore
用N初始化。(N + 1)'线程将在Semaphore
上阻塞并等待空闲连接。
相关问题
- 1. 需要了解Python信号和模块
- 2. Python中的线程与线程模块
- 3. Python请求模块多线程
- 4. Python线程模块
- 5. python多线程信号
- 6. Python线程和信号灯
- 7. 多线程Python中的信号处理
- 8. Python线程中的信号或互斥
- 9. Python的线程模块
- 10. Java中的信号量和线程池
- 11. Python请求模块中的SSLError模块
- 12. 线程应用程序的信号量同步失败,Python
- 13. Python多线程无法处理来自模块的信号调用
- 14. 学习Python线程模块
- 15. Python线程管理模块
- 16. C++块线程退出信号/函数
- 17. 等待的线程数和信号量
- 18. 带信号量的多线程
- 19. Android的信号量停止线程
- 20. 使用线程和队列模块的Python中的多线程
- 21. 请求模块Python
- 22. 多线程,阻塞和信号量
- 23. 信号量和线程问题
- 24. C信号量线程读取文件
- 25. POSIX线程和公平(信号量)
- 26. 信号量C#两个线程
- 27. Python模块功能的线程
- 28. Python的线程模块循环参数?
- 29. 如何使顶层模块的线信号和其它模块的INOUT信号之间连接
- 30. Queue.Queue VS信号量,锁等在多线程Python代码
评论不用于扩展讨论;这个对话已经[转移到聊天](http://chat.stackoverflow.com/rooms/77824/discussion-on-answer-by-werewindle-the-need-of-semaphore-in-python-threading-mod) 。 – Taryn