2010-11-09 68 views
2

我一直在用Python進行線程實驗,並且很好奇何時使用它。Python線程,排隊,異步...這是什麼意思?

例如,我應該在多處理時使用多線程?當我應該使用異步IO而不是線程時,會出現什麼情況?

我基本上明白每個人都做了什麼(我認爲),但我看不到任何利用其中的優點/缺點。

  • 如果我正在創建一個小的HTTP服務器,應該使用什麼?
  • 如果我正在創建一個小型HTTP客戶端,應該使用什麼?

這令我感到困惑......

回答

0

Python的多是有道理的,當你有多個內核和/或CPU的機器。使用線程和進程的主要區別是進程不共享地址空間,因此一個進程無法輕鬆訪問另一個進程的數據。這就是爲什麼多處理模塊提供管理員和隊列以及類似的東西。

線程的問題是Pythons Global Interpreter Lock,這與多線程應用程序嚴重混淆。

當您長時間運行IO操作(讀取大文件,等待網絡響應)並且不希望應用程序阻止時,異步IO很有用。許多操作系統都提供了內置的實現。

因此,對於您的服務器,您可能會使用多處理或多線程,而對於您的客戶端而言,異步IO更合適。

+0

最輕量級的HTTP服務器使用異步I/O。例如見lighttpd和nginx。 – Fabian 2010-11-09 09:52:37

+0

對不起,如果我還沒有得到它......但這是否意味着多線程/處理是有用的,當你做多個併發IO操作(服務多個客戶端),異步是有用的,如果你正在做一個單一的IO進程和不希望你的應用程序阻塞(從服務器發送/接收)? – dave 2010-11-09 10:01:59

+0

@james:你必須嘗試一下並收集一些經驗來指導你的決定。 – 2010-11-09 10:25:56

2

你想談的不是具體到Python僅這是關於多VS一般線程我認爲你可以在谷歌很多說法從兩個側面發現,喜歡穿的那些,並且更喜歡多的人。

但是對於蟒蛇多線程是有限的(如果你使用CPython的)由GIL (Global Interpreter Lock),所以大多數Python程序員喜歡使用多過線程(這是圭多推薦)

然而,你再右邊的GIL是 不是那麼糟糕,因爲你會開始 想:你就必須撤消 洗腦從Windows和 的Java擁護者了誰似乎認爲 線程,以接近 併發活動的唯一途徑,吉多·範羅蘇姆。

,你可以在這裏找到一些more信息

+0

檢查此鏈接:http://www.cs.colorado。EDU /〜凱納/類/ 5828/S10 /演示/ ali_alzabarah_se_presentati.pdf – mouad 2010-11-09 09:52:35