欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

 更新時(shí)間:2016年06月24日 16:44:14   作者:烏龜殼  
Gevent庫的奧義在于并發(fā)式的高性能網(wǎng)絡(luò)程序設(shè)計(jì)支持,這里我們將來講解Python的網(wǎng)絡(luò)編程庫Gevent的安裝及使用技巧,來看一下Gevent支持的多進(jìn)程程序編寫:

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

import gevent
from gevent.server import StreamServer

def eat_cpu():
  for i in xrange(10000): pass

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

from gevent import monkey; monkey.patch_os()
from gevent.server import StreamServer
from multiprocessing import Process

def eat_cpu(): 
  for i in xrange(10000): pass

def 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 = 4

for i in range(process_count - 1):
  Process(target=serve_forever, args=tuple()).start()

serve_forever()

相關(guān)文章

  • matlab 計(jì)算灰度圖像的一階矩,二階矩,三階矩實(shí)例

    matlab 計(jì)算灰度圖像的一階矩,二階矩,三階矩實(shí)例

    這篇文章主要介紹了matlab 計(jì)算灰度圖像的一階矩,二階矩,三階矩實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2020-04-04
  • 學(xué)習(xí)Python,你還不知道m(xù)ain函數(shù)嗎

    學(xué)習(xí)Python,你還不知道m(xù)ain函數(shù)嗎

    Python?中的?main?函數(shù)充當(dāng)程序的執(zhí)行點(diǎn),在?Python?編程中定義?main?函數(shù)是啟動(dòng)程序執(zhí)行的必要條件。本文就來帶大家深入了解一下main函數(shù),感興趣的可以了解一下
    2022-09-09
  • Python3.5 創(chuàng)建文件的簡(jiǎn)單實(shí)例

    Python3.5 創(chuàng)建文件的簡(jiǎn)單實(shí)例

    下面小編就為大家分享一篇Python3.5 創(chuàng)建文件的簡(jiǎn)單實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2018-04-04
  • 學(xué)python最電腦配置有要求么

    學(xué)python最電腦配置有要求么

    在本篇內(nèi)容中小編給大家整理的是關(guān)于學(xué)習(xí)python中電腦配置的相關(guān)文章,需要的朋友們可以學(xué)習(xí)下。
    2020-07-07
  • 詳解查看Python解釋器路徑的兩種方式

    詳解查看Python解釋器路徑的兩種方式

    這篇文章主要介紹了詳解查看Python解釋器路徑的兩種方式,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-10-10
  • Python注釋、分支結(jié)構(gòu)、循環(huán)結(jié)構(gòu)、偽“選擇結(jié)構(gòu)”用法實(shí)例分析

    Python注釋、分支結(jié)構(gòu)、循環(huán)結(jié)構(gòu)、偽“選擇結(jié)構(gòu)”用法實(shí)例分析

    這篇文章主要介紹了Python注釋、分支結(jié)構(gòu)、循環(huán)結(jié)構(gòu)、偽“選擇結(jié)構(gòu)”用法,結(jié)合實(shí)例形式分析了Python注釋、分支結(jié)構(gòu)、循環(huán)結(jié)構(gòu)、偽“選擇結(jié)構(gòu)”相關(guān)功能、用法及操作注意事項(xiàng),需要的朋友可以參考下
    2020-01-01
  • Python利用命名空間解析XML文檔

    Python利用命名空間解析XML文檔

    這篇文章主要介紹了Python利用命名空間解析XML文檔,幫助大家更好的理解和學(xué)習(xí)Python,感興趣的朋友可以了解下
    2020-08-08
  • python批量處理多DNS多域名的nslookup解析實(shí)現(xiàn)

    python批量處理多DNS多域名的nslookup解析實(shí)現(xiàn)

    這篇文章主要介紹了python批量處理多DNS多域名的nslookup解析實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-06-06
  • python操作日期和時(shí)間的方法

    python操作日期和時(shí)間的方法

    經(jīng)常獲得了一個(gè)用戶提交的當(dāng)前日期,我們需要以這個(gè)日期為依據(jù)返回它的前一天、后一天的日期或者轉(zhuǎn)換操作等。用Python可以非常簡(jiǎn)單的解決這些關(guān)于日期計(jì)算的問題
    2014-03-03
  • Python2和Python3.6環(huán)境解決共存問題

    Python2和Python3.6環(huán)境解決共存問題

    這篇文章主要介紹了Python2和Python3.6環(huán)境解決共存問題,需要的朋友可以參考下
    2018-11-11

最新評(píng)論