Gevent

距離1.0第一個alpha版發(fā)布已有兩年多時間。根據官方網站的信息,1.0版引入了:

新的核心。事件循環(huán)使用libev代替了libevent,原因可以參考這里。而且事件循環(huán)現在是可插拔的了。

新的DNS解析器。有兩個解析器:默認的基于線程池的,適用于Windows和Mac;另一個基于c-ares庫的,適用于Linux。socket模塊中還增加了gethostbyname_ex等多個函數。

新的API。包括gevent.wait()和gevent.iwait()、子進程支持、UDP服務器以及尚處試驗階段的線程池等。

完整的更新可以參考變更日志

現在gevent已經不是一人項目了,1.0版的貢獻者達到26人,值得注意的是,其中有阿里的陳小玉

gevent是基于協程的高性能Python網絡庫,相比Twisted、Stackless等,gevent使用libev事件循環(huán),因此速度很快、性能很好,使用greenlet提供高層的同步API,因此非常輕量。

它由俄羅斯出生的程序員Denis Bilenko開 發(fā),Bilenko目前住在荷蘭阿姆斯特丹,是Surfly公司的創(chuàng)始人。他曾經是另一個Python網絡庫Eventlet的開發(fā)者之一,2009年因 為Eventlet無法滿足項目需要,他決定另外開發(fā)一個更輕量的庫,這就是gevent。某種意義上,gevent是從Eventlet項目派生出來 的。[1]

近來,gevent的發(fā)展勢頭不錯,在GitHub上的關注度已經超過Eventlet,有青出于藍而勝于藍的意思。(當然Eventlet還剩一個優(yōu)勢,OpenStack的網絡通信是基于它的。)距離挑戰(zhàn)Twisted,可能還有一段距離。不過高性能總是利器,ZeroMQ和Nginx的先例在那里。

有名的案例里,Omegle因為性能問題從Twisted遷移到了gevent,MeeboSpotify的情況類似,Twilio是兩者并用。

相關技術資料

官方網站

StackOverflow,其中關于Twisted和gevent等Python網絡庫的選型討論可以參考這里這里。

Bilenko在2013 EuroPython會議上的演講稿

Mixpanel使用gevent的經驗總結(2011年),中文翻譯

CSDN網友Ewing333翻譯的gevent文檔(2012年5月)

OSChina的gevent頁面

話說pycon沒有白去阿,了解了很多以前不知道的東西,比如說協程,gevent,greenlet,eventlet。說說協程,進程和線程大家平時 了解的都比較多,而協程算是一種輕量級進程,但又不能叫進程,因為操作系統(tǒng)并不知道它的存在。什么意思呢,就是說,協程像是一種在程序級別來模擬系統(tǒng)級別 的進程,由于是單進程,并且少了上下文切換,于是相對來說系統(tǒng)消耗很少,而且網上的各種測試也表明,協程確實擁有驚人的速度。并且在實現過程中,協程可以 用以前同步思路的寫法,而運行起來確是異步的,也確實很有意思。話說有一種說法就是說進化歷程是多進程->多線程->異步->協程,暫 且不論說的對不對,單從諸多贊譽來看,協程還是有必要理解一下的。

比較慚愧,greenlet沒怎么看就直接看gevent,官方文檔還是可以看看的,尤其是源碼里的examples都相當不錯,有助于理解gevent的使用。

gevent封裝了很多很方便的接口,其中一個就是monkey

from?gevent?import?monkey

monkey.patch_all()

這樣兩行,就可以使用python以前的socket之類的,因為gevent已經給你自動轉化了,真是超級方便阿。

而且安裝gevent也是很方便,首先安裝依賴libevent和greenlet,再利用pypi安裝即可

sudo apt-get install libevent-dev

sudo apt-get install python-dev

sudo easy-install gevent

然后,gevent中的event,有wait,set等api,方便你可以讓某些協程在某些地方等待條件,然后用另一個去喚醒他們。

再就是gevent實現了wsgi可以很方便的當作python的web server服務器使。

Links:

https://ivan-site.com/2012/10/gevent-gunicorn-vs-uwsgi/

http://www.gevent.org/

http://www.it165.net/admin/html/201308/1682.html

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

  • 前述 進程 線程 協程 異步 并發(fā)編程(不是并行)目前有四種方式:多進程、多線程、協程和異步。 多進程編程在pyt...
    softlns閱讀 6,396評論 2 24
  • 背景 最近接觸到用 Twisted 來寫個 RPC 服務器,對高并發(fā)、性能和大量長連接時的穩(wěn)定性方面有要求,所以應...
    小虛大魔王閱讀 6,510評論 5 21
  • # Python 資源大全中文版 我想很多程序員應該記得 GitHub 上有一個 Awesome - XXX 系列...
    aimaile閱讀 26,835評論 6 427
  • 一個實時爬取的接口,也是針對這個一直在被我博客的網站,跟他家的抗爭讓我收益良多 先講一講這一次的問題所在,因為時時...
    Utopi_a閱讀 4,361評論 2 10
  • gevent基于協程的網絡庫,基于libev的快速的事件循環(huán),基于greenlet的輕量級執(zhí)行單元,重用了Pyth...
    xncode閱讀 1,551評論 0 1

友情鏈接更多精彩內容