gevent 一點點

來源:互聯網
上載者:User

Luo Weifeng 2011-8-28

話說, 北京的天氣還算很悶熱, 星期天一隊人馬跑來公司噌網, 也能是年輕氣盛,發正沒老婆沒孩子的, 在住處獃著也不爽, 開vpn也很慢,乾脆就來公司了。 

好, 廢話就說這麼多, 這裡我介紹一個python的一個非同步並發庫:gevent。 

gevent is a Python networking library that uses greenlet to
provide a synchronous API on top oflibevent event
loop.

具體的可以參見: http://www.gevent.org/intro.html
前面我也蜻蜓點水似的介紹過greenlet 和 libevent, 這裡再解釋一下, libevent就是個事件分發的引擎, greenlet提供了輕量級‘線程’支援(其實不是線程,就是greenlet context)。  按照官網的這個說法, gevent就是基於這兩個東西的一個專門處理網路邏輯的並行庫。 看一個例子就很容易明白。

concurrent_download.py

#!/usr/bin/python# Copyright (c) 2009 Denis Bilenko. See LICENSE for details."""Spawn multiple workers and wait for them to complete"""urls = ['http://www.google.com', 'http://www.yandex.ru', 'http://www.python.org']import geventfrom gevent import monkey# patches stdlib (including socket and ssl modules) to cooperate with other greenletsmonkey.patch_all()import urllib2def print_head(url):    print ('Starting %s' % url)    data = urllib2.urlopen(url).read()    print ('%s: %s bytes: %r' % (url, len(data), data[:50]))jobs = [gevent.spawn(print_head, url) for url in urls]gevent.joinall(jobs)

這裡的代碼很簡單,就是對urls裡邊的網址進行並行抓取,再列印出各自的資訊, 這裡要說的是 from gevent import monkey 這個monkey是第三方的替代庫, 就是安全的將python內建的socket 和ssl模組使用 第三方更快的庫來替代, 傳說速度提高好多倍。這裡的gevent.spawn 其實就是對greenlet.start 的一個helper封裝。 gevent.greenlet 有對greenlet的支援, 所以可以放心使用, 而gevent中不像純greenlet那樣需要我們自己手動的指定運行流程,它自己隨機的幫我們處理。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.