国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

Python的網(wǎng)絡(luò)編程庫Gevent的安裝及使用技巧

2019-11-25 16:42:02
字體:
供稿:網(wǎng)友

安裝(以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庫性能很高,但一直以來我都糾結(jié)在python的GIL模型導(dǎo)致的線程不能搶占多核資源上面。
而啟動多個python進(jìn)程的這種利用多核的模式又需要增加前端負(fù)載均衡,比如lvs那些,有些麻煩。
multiprocessing模塊和os.fork又會使得兩個進(jìn)程重復(fù)在事件核心注冊accept事件,導(dǎo)致文件句柄重復(fù)的異常。
至于一個進(jìn)程監(jiān)聽,多個進(jìn)程處理的模式,監(jiān)聽的那個進(jìn)程資源又不好分配――是獨(dú)立分配一個核心還是不單獨(dú)分配呢?如果單獨(dú)分配,連接量小的時候就浪費(fèi)了一個核心,如果不分配,連接量大的時候cpu又會頻繁切換進(jìn)程。
昨日才發(fā)現(xiàn)原來gevent是可以很輕松地將它的網(wǎng)絡(luò)模型分布到多個進(jìn)程并行處理的。
秘訣就在gevent.fork()。
以前想當(dāng)然地認(rèn)為gevent.fork只是greenlet.spawn的一個包裝,原來不是這樣。gevent.fork能替代os.fork,不僅會啟動一個新的進(jìn)程,而且能將它們底層的事件處理溝通起來,進(jìn)行并行處理。

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模塊也可以像往常一樣使用,并達(dá)到并行處理的效果了。

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()

發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 新巴尔虎右旗| 通山县| 普格县| 南雄市| 房产| 新绛县| 佛冈县| 南木林县| 合川市| 大同市| 武川县| 固阳县| 滦平县| 鹤岗市| 阳谷县| 凌云县| 崇明县| 金昌市| 宜春市| 茶陵县| 满洲里市| 汉川市| 宁阳县| 新乡县| 乐清市| 霍邱县| 光泽县| 桦川县| 彭泽县| 天镇县| 千阳县| 奉新县| 瑞昌市| 江津市| 许昌县| 青州市| 尉犁县| 内乡县| 沾化县| 行唐县| 柘荣县|