差不多是這樣子。多線程目前僅用於網絡多線程采集, 以及性能測試。
其它的語言也有類似的情況,線程本身的特點導致線程的適用範圍是受限的。只有CPU過剩,而其它的任務很慢,此時用線程才是有益的,可以很好平衡等待時間,提高並發性能。
線程的問題主要是線程的安全穩定性。線程無法強制中止,同時線程與主進程***享內存,可能會影響主進程的內存管理。
在python裏線程出問題,可能會導致主進程崩潰。 雖然python裏的線程是操作系統的真實線程。
那麽怎麽解決呢?通過我們用進程方式。子進程崩潰後,會完全的釋放所有的內存和錯誤狀態。所以進程更安全。 另外通過進程,python可以很好的繞過GIL,這個全局鎖問題。
但是進程也是有局限的。不要建立超過CPU總核數的進程,否則效率也不高。
簡單的總結壹下。
當我們想實現多任務處理時,首先要想到使用multiprocessing, 但是如果覺著進程太笨重,那麽就要考慮使用線程。 如果多任務處理中需要處理的太多了,可以考慮多進程,每個進程再采用多線程。如果還處理不要,就要使用輪詢模式,比如使用poll event, twisted等方式。如果是GUI方式,則要通過事件機制,或者是消息機制處理,GUI使用單線程。
所以在python裏線程不要盲目用, 也不要濫用。 但是線程不安全是事實。如果僅僅是做幾個後臺任務,則可以考慮使用守護線程做。如果需要做壹些危險操作,可能會崩潰的,就用子進程去做。 如果需要高度穩定性,同時並發數又不高的服務。則強烈建議用多進程的multiprocessing模塊實現。
在linux或者是unix裏,進程的使用代價沒有windows高。還是可以接受的。