我在一臺服務器上運行python程序,它有python2.7.6。我已經使用python的threading
模塊來創建多個線程。我已經創建了23個線程,所以我很困惑是否所有的處理器核心實際上都在使用,有沒有什麼辦法可以在我的服務器中檢查。任何建議都應該是理想的線程數量,根據我們爲了提高程序效率的處理器數量而生成的線程數量。python中應該怎麼產生線程
1
A
回答
1
David Beazly在Python中有a great talk on threading。他還就這個主題here做了精彩的介紹。
不幸的是,Python有一些叫做GIL的東西,它限制了Python一次執行一個線程。要使用所有核心,您必須使用多個進程:See Multiprocessing。
有些在Python社區中並不一定會將GIL視爲挫折,您可以通過共享內存線程之外的其他方式利用多個內核。
在這裏尋找一個great blog post on utilizing multiple cores in Python.
編輯:以上 是CPython的(最常見的,也的Python的參考實現)實現。那裏有幾個"yes but"答案在那裏(主要是指多線程在不同的Python實現),但我通常會指向人answers like this one描述的GIL在CPython的和替代的利用多核6
0
沒有真正的答案對於這個問題,每個人都可能有不同的看法。在測試x
場景以及線程的y
之後,應確定應用程序的線程數以提高性能。性能取決於操作系統調度程序如何根據CPU負載或正在運行的進程數量將您的線程調度到可用的CPU核心。如果你有4個內核,那麼這並不意味着它只能執行4個線程。實際上你也可以運行23個線程。這就是我們所說的調度程序通過在進程之後調度進程給予我們的並行性幻覺,因此使我們認爲一切都在同時運行。
這是事情
如果您運行1個線程,您可能無法獲得足夠的性能。隨着線程數量不斷增加,調度程序將花費更多時間安排線程並阻礙整體應用程序的性能。
相關問題
- 1. Python代碼,我應該線程?該怎麼辦?
- 2. 我該怎麼做一個多線程扭曲python
- 3. 這是怎麼產生的?
- 4. 線程化該方法會產生段錯誤,爲什麼?
- 5. 我應該什麼時候生產?
- 6. python:根據需求產生線程
- 7. C++產生線程
- 8. Python,是否適合一個線程產生另一個線程
- 9. UAT數據應該是生產的鏡像嗎?如果是這樣,怎麼樣?
- 10. 如果自定義生產力應用被iOS App Store拒絕,該怎麼辦?
- 11. 我應該在生產應用程序中避免打包嗎?
- 12. Ignited-Datatables,應該怎麼做?
- 13. netbeans應該怎麼做?
- 14. 我應該怎麼做?
- 15. 成千上萬的Java線程產生的線程...爲什麼?
- 16. 爲什麼scikit-learn中的GridSearchCV產生這麼多的線程
- 17. Android中的線程。不知道該怎麼做。超困惑
- 18. 在C++中,爲了確保singleton線程安全,該怎麼做?
- 19. 閱讀產生的線程
- 20. 從servlet產生線程?
- 21. 我該怎麼做,我應該
- 22. 可以在wsgi應用程序中產生線程嗎?
- 23. uwsgi python應用程序中的python-kafka生產者超時
- 24. 如果所需資產無法加載,應該怎麼做?
- 25. 這個寓言是怎麼產生的?
- 26. 我怎麼也產生在asp.net
- 27. 這行代碼是怎麼產生的?
- 28. 我們應該在生產中使用什麼AWS配置?
- 29. 生產者和消費者 - Python中的多個線程
- 30. 在python生產者線程中刪除shouldStop變量的使用
謝謝回答,但我的程序最初用於需要大約14分鐘才能完成。然而,應用線程後,它已經減少到3分鐘。所以當然,我認爲隨着時間的急劇減少,多個內核正在被利用。 – kkk
@kkk - 如果您查看我發佈的鏈接,您應該熟悉Python中的多線程。當進程是IO密集型的時候,多線程可以提高性能,因爲當線程忙於等待IO資源時,線程將釋放它對GIL的鎖定。如果你的應用程序是CPU密集的;您將看到使用多個線程的性能改善很小或沒有。你甚至可以看到嚴重的性能損失! – nlloyd