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