2014-10-30 90 views
1

我想在服務器程序中使用兩個線程,一個用於偵聽使用Twisted庫的客戶端的任何通信,另一個用於執行其他計算服務器。在我嘗試實現這些線程時,似乎python線程庫不支持並行線程,如this問題所回答的那樣。我想知道是否有任何其他的Python庫來解決這個問題?或者其他方式來規避這種限制? 預先感謝您。用於聯網的Python線程 - 線程不能並行運行

+1

['multiprocessing'](https://docs.python.org/2/library/multiprocessing.html)模塊使用併發進程而不是線程,所以它不受GIL的影響。 – dano 2014-10-30 14:19:16

回答

2

Python的GIL(全局解釋器鎖)可以防止兩個線程同時執行Python代碼。幸運的是,它不包括I/O,所以如果你的線程執行大量的網絡,數據庫或文件系統,那麼通常的線程就可以正常工作。他們不會讓你利用多核心進行計算,但會讓其他線程前進,而其中任何一個線程都在等待發生的事情。

如果您的需求更多的是計算而不是I/O,那麼線程(在Python中實現)將無濟於事。更好地使用multiprocessing模塊(自Python 2.6以來的標準),它使用'線程'API生成多個進程,每個進程都有一個獨立的Python解釋器,因此它是自己的GIL。

+0

謝謝你的回答! – user823743 2014-10-31 14:05:45