我想在服務器程序中使用兩個線程,一個用於偵聽使用Twisted庫的客戶端的任何通信,另一個用於執行其他計算服務器。在我嘗試實現這些線程時,似乎python線程庫不支持並行線程,如this問題所回答的那樣。我想知道是否有任何其他的Python庫來解決這個問題?或者其他方式來規避這種限制? 預先感謝您。用於聯網的Python線程 - 線程不能並行運行
1
A
回答
2
Python的GIL(全局解釋器鎖)可以防止兩個線程同時執行Python代碼。幸運的是,它不包括I/O,所以如果你的線程執行大量的網絡,數據庫或文件系統,那麼通常的線程就可以正常工作。他們不會讓你利用多核心進行計算,但會讓其他線程前進,而其中任何一個線程都在等待發生的事情。
如果您的需求更多的是計算而不是I/O,那麼線程(在Python中實現)將無濟於事。更好地使用multiprocessing
模塊(自Python 2.6以來的標準),它使用'線程'API生成多個進程,每個進程都有一個獨立的Python解釋器,因此它是自己的GIL。
+0
謝謝你的回答! – user823743 2014-10-31 14:05:45
相關問題
- 1. 並行運行的python線程?
- 2. python多線程長線程運行
- 3. 用於運行可執行文件的python多線程進程
- 4. PHP Pthreads - 線程不併行運行
- 5. Python:線程仍在運行
- 6. Python正在運行線程
- 7. 同時運行Python線程
- 8. 在Python中運行不同的線程
- 9. 並行處理Python線程
- 10. 並行與線程 - 性能
- 11. 線程並行
- 12. 爲什麼線程不能在java中並行運行?
- 13. 線程不能同時運行
- 14. 新線程運行的UI線程
- 15. 線程運行不正常
- 16. android線程不運行
- 17. Java的多線程,讓線程並行
- 18. Python多線程:如何讓守護進程線程運行
- 19. 線程並行於其他進程java
- 20. 線程和運行
- 21. 運行C++線程()
- 22. 線程未運行
- 23. Java線程運行
- 24. 在網頁中運行的線程
- 25. 從另一個線程運行線程
- 26. 線程可運行vs擴展線程
- 27. C#線程並行
- 28. CUDA並行線程
- 29. Asp.Net:executionTimeout +並行線程
- 30. 在並行線程
['multiprocessing'](https://docs.python.org/2/library/multiprocessing.html)模塊使用併發進程而不是線程,所以它不受GIL的影響。 – dano 2014-10-30 14:19:16