Python多線程具體運用的方法
Python編程語言是一種功能強大的面向對象計算機通用型語言。那么今天我們就可以先從Python多線程的具體應用開始了解,從而進一步的對這一編程語言有一個深刻的認識,以幫助我們在實際中的應用。
為了利用多核處理器,看過很多文檔,研究很多python相關技術,全部是失望的。
1、Python:受限于GIL,被鎖住只能用一個CPU核心。
2、Twisted:其實只有一個線程,何談多核的利用。
3、Stackless:測試表明其多線程程序的速度比Python多線程使用的native線程方式要快一點,不過一樣沒法用多核。
4、parallel Python:多進程方式,感覺封裝的很齷齪,雖然翻譯完了文檔,但是仍然沒有興趣去使用。
現在的辦法:
1、負載均衡:后面在多臺服務器上啟動多個Python程序。現在我開發的應用基本上都是用twistd啟動的daemon程序。#t#
2、C/S應用:各個進程間用多進程通信。
3、subprocess:使用這個模塊,利用外部進程作worker,異步等待結果。
從這些解決方法之后,倒是感覺Python作為膠水語言其實多核利用也不是很必要。
pyprocessing 測試過沒?這個模塊將會被加入到python2.6中。
我用pyprocessing改造了Karrigell,性能獲得了很大提升。
在Quixote官方白皮書中已經詳細描述了Quixote的工作模式。Quixote可以使用Python自代的http_server(主要用于開發調試)和與Apache(或lighttpd)配合使用。
Quixote與Apache配合使用方式如下:
使用CGI,文檔中稱為egular CGI。被認為效率***的一種方式,因為每一個請求都會創建一個新的進程。
使用fastCGI,CGI可以運行fastCGI一定是可以應用的。這也是豆瓣采用的方式。在Quixote作者的一個PPT中,他認為fastCGI是buggy的。哦:(也不至于啊。我們正在尋找使用fastCGI的部署經驗。
使用mod_python,將python代碼嵌入到Apache中。
使 用SCGI,這是作者推薦的。使用Apache SCGI module scgi_mod將遵循SCGI協議Apache將請求發送到相應的Socket如localhost:3001。而這個Socket由本地運行的一個 Python程序打開。這個Python多線程將處理請求,并返回結果。