Python的網路編程庫Gevent的安裝及提示,pythongevent

來源:互聯網
上載者:User

Python的網路編程庫Gevent的安裝及提示,pythongevent

安裝(以CentOS為例)
gevent依賴libevent和greenlet:
1.安裝libevent
直接yum install libevent
然後配置python的安裝
2.安裝easy_install
(1)

wget -q http://peak.telecommunity.com/dist/ez_setup.py

(2)使用

python ez_setup.py

(3)使用easy_install 查看命令是否可用,如果不可用可以講路徑加入到PATH中
3.安裝greenlet
(1)

yum install python-devel

(2)

easy_install greenlet

4.安裝gevent

pip install cython -e git://github.com/surfly/gevent.git@1.0rc2#egg=gevent

提示
Gevent庫效能很高,但一直以來我都糾結在python的GIL模型導致的線程不能搶佔多核資源上面。
而啟動多個python進程的這種利用多核的模式又需要增加前端負載平衡,比如lvs那些,有些麻煩。
multiprocessing模組和os.fork又會使得兩個進程重複在事件核心註冊accept事件,導致檔案控制代碼重複的異常。
至於一個進程監聽,多個進程處理的模式,監聽的那個進程資源又不好分配——是獨立分配一個核心還是不單獨分配呢?如果單獨分配,串連量小的時候就浪費了一個核心,如果不分配,串連量大的時候cpu又會頻繁切換進程。
昨日才發現原來gevent是可以很輕鬆地將它的網路模型分布到多個進程平行處理的。
秘訣就在gevent.fork()。
以前想當然地認為gevent.fork只是greenlet.spawn的一個封裝,原來不是這樣。gevent.fork能替代os.fork,不僅會啟動一個新的進程,而且能將它們底層的事件處理溝通起來,進行平行處理。

import geventfrom gevent.server import StreamServerdef eat_cpu():  for i in xrange(10000): passdef cb(socket, address):  eat_cpu()  socket.recv(1024)  socket.sendall('HTTP/1.1 200 OK\n\nHello World!!')  socket.close()server = StreamServer(('',80), cb, backlog=100000)server.pre_start()gevent.fork()server.start_accepting()server._stopped_event.wait()

 打上monkey.patch_os後,os.fork就可以被gevent.fork替代了,這樣同時multiprocessing模組也可以像往常一樣使用,並達到平行處理的效果了。

from gevent import monkey; monkey.patch_os()from gevent.server import StreamServerfrom multiprocessing import Processdef eat_cpu():   for i in xrange(10000): passdef cb(socket, address):  eat_cpu()  socket.recv(1024)  socket.sendall('HTTP/1.1 200 OK\n\nHello World!!')  socket.close()server = StreamServer(('',80), cb, backlog=100000)server.pre_start()def serve_forever():  server.start_accepting()  server._stopped_event.wait()process_count = 4for i in range(process_count - 1):  Process(target=serve_forever, args=tuple()).start()serve_forever()

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.