當前位置:首頁 » 編程語言 » pythonlibevent

pythonlibevent

發布時間: 2023-01-10 23:35:56

A. libevent是跑在什麼系統上的

一.C10K的問題 C10K的問題在上個世紀90年代就被提出來了。大概的意思是當用戶數超過1萬時,很多設計不良好的網路服務程序性能都將急劇下降、甚至癱瘓。並且,這個問題並不能通過升級硬體設備解決,是操作系統固有的問題,也就是說,如果你的伺服器最高能支撐1000個並發,盡管你升級了計算能力高一倍的 cpu,內存再翻一番,硬碟轉速在快一倍,也無法支撐2000個並發。 經典的網路編程模型有4個: 1. Serve one client with each thread/process, and use blocking I/O。即對每個客戶都使用不同的線程或進程進行服務,在每個線程或進程中使用阻塞I/O。這是小程序和java常用的策略,對於互動式的應用也是常見的選擇,這種策略很能難滿足高性能程序的需求,好處是實現極其簡單,容易實現復雜的交互邏輯。我們常用的Apache、ftpd等都是這種工作。 2. Serve many clients with single thread, and use nonblocking I/O and readiness notification。即對所有的客戶使用單一一個線程或進程進行服務,在這個線程或進程里,採用非同步IO的策略。這是經典模型,優點在於實現較簡單,方便移植,也能提供足夠的性能;缺點在於無法充分利用多CPU的資源。 3. Serve many clients with each thread, and use nonblocking I/O and readiness notification 對經典模型2的簡單改進,仍然採用非同步IO的策略,但對所有的客戶使用多個線程或進程進行服務。缺點是容易在多線程並發上出bug,甚至某些OS不支持多線程進行readiness notification 4. Serve many clients with each thread, and use asynchronous I/O 在有AI/O支持的OS上,能提供相當高的性能。不過AI/O編程模型和經典模型差別相當大,基本上很難寫出一個框架同時支持AI/O和經典模型。這個模型主要是用於window平台上。 在linux上開發高性能的網路應用,只能選著第2、3種方式。考慮到復雜性,我們往往只採用第2種。下面就討論一下第二種模型。 我們知道,實現非同步IO一般是採用select 或poll來實現。Select 定義如下: int select(int n, fd_set *rd_fds, fd_set *wr_fds, fd_set *ex_fds, struct timeval *timeout); Poll 的介面如下: int poll(struct pollfd *ufds, unsigned int nfds, int timeout); 然而 Select 和Poll 在連接數增加時,性能急劇下降。這有兩方面的原因:首先操作系統面對每次的select/poll 操作,都需要重新建立一個當前線程的關心事件列表,並把線程掛在這個復雜的等待隊列上,這是相當耗時的。其次,應用軟體在select/poll 返回後也需要對傳入的句柄列表做一次掃描來判斷哪些句柄是可用的,這也是很耗時的。這兩件事都是和並發數相關,而I/O 事件的密度也和並發數相關,導致CPU 佔用率和並發數近似成O(n2)的關系。 因為以上的原因,Unix 上開發了性能更高的epoll, kqueue, /dev/poll 這3個程序介面來解決上述問題。其中epoll 是linux 的方案,kqueue 是freebsd 的方案,/dev/poll 是最古老的Solaris 的方案,使用難度依次遞增。 簡單的說,這些api 做了兩件事: 1. 避免了每次調用select/poll 時kernel 分析參數建立事件等待結構的開銷,kernel 維護一個長期的事件關注列表,應用程序通過句柄修改這個列表和捕獲I/O 事件。 2. 避免了select/poll 返回後,應用程序掃描整個句柄表的開銷,Kernel 直接返回具體的事件列表給應用程序。 二. libevent庫 由於epoll, kqueue, /dev/poll每個介面都有自己的特點,程序移植非常困難,於是需要對這些介面進行封裝,以讓它們易於使用和移植,其中libevent庫就是其中之一。 按照libevent的官方網站,libevent庫提供了以下功能:當一個文件描述符的特定事件(如可讀,可寫或出錯)發生了,或一個定時事件發生了,libevent就會自動執行用戶指定的回調函數,來處理事件。目前,libevent已支持以下介面/dev/poll, kqueue(2), event ports, select(2), poll(2) 和 epoll(4)。Libevent的內部事件機制完全是基於所使用的介面的。因此libevent非常容易移植,也使它的擴展性非常容易。目前,libevent已在以下操作系統中編譯通過:Linux,BSD,Mac OS X,Solaris和Windows。 使用libevent庫進行開發非常簡單,也很容易在各種unix平台上移植。一個簡單的使用libevent庫的程序如下: 三.libevent庫的應用 Go2代理是一個大流量的代理應用,月流量近TB。其中圖片、flash、zip文件占總流量的絕大部分。為了減少流量成本,需要將部分進行分流。開始時,使用了傳統的php代理來分流,但Go2並發訪問極大,多進程架構的php無法承受,在虛擬主機vps上啟動數秒後就立即癱瘓。後改用 python的twisted網路架構,採用了twisted的非同步tcp通訊功能。運行一段時間後,發現twisted的非同步dns穩定性不太好,經常發生系統級的崩潰。最後,經過分析比較,決定採用libevent庫來做Go2 的分流代理應用。 Libevent庫支持非同步socket,支持非同步dns,並本身還帶了個簡單的http 伺服器。Go2 的分流代理應用就是使用了libevent庫的以上三個功能。 1、簡單的http 伺服器:實現的分類代理的用戶端的輸入,輸出管理。 2、非同步socket,實現了高並發性的用戶接入,和高並發性的目的伺服器訪問。 3、非同步dns,解決了dns查詢時的並發性和高效性。

B. windows下怎麼安裝Gevent

使用gevent,可以對並發多個http請求的爬蟲程序進行很好的優化, 缺點是,安裝相對麻煩,這個包依賴於libevent,在windows下面用easy_install直接安裝是不行的,必須用源代碼包
wget http://pypi.python.org/packages/source/g/gevent/gevent-0.13.8.tar.gz
tar zxvf gevent-0.13.8.tar.gz
cd gevent
裡面有個fetch_libevent.py 用來幫你下載libevent依賴
python fetch_libevent.py
python setup.py build
python setup.py install
這樣可以安裝成功,如果還不行,只能使用大殺器了windows下安裝python模塊的終極解決方案。

C. 怎麼將python腳本 部署到虛擬centos7上去

1.安裝centos VMware9下面安裝centos2.在centos下面設置共享文件夾為你本地的論壇的代碼,然後設置網路為橋接:直接連接到物理網路,賦值網路連接狀態3.進入forum_svr.py目錄下運行python forum_svr.py,當然是啟動不了服務的4.安裝easy_install(想辦法)5.安裝pymogo tornado memcache 等一系列的模塊。6.當然還是啟動不了的7.還需要啟動memcached ,所以就要安裝memcached,Memcached是由Danga Interactive開發的,高性能的,分布式的內存對象緩存系統,用於在動態應用中減少資料庫負載,提升訪問速度。所以你就要安裝libevent8.libevent 最新的穩定版:wget http://monkey.org/~provos/libevent-1.4.14b-stable.tar.gz
# rpm -q libevent (首先檢查系統是否安裝了Libevent)
# yum -y install libevent* (我使用的Yum安裝)或者可以使用編譯安裝
# tar zxvf libevent-1.4.14b-stable.tar.gz
# cd libevent-1.4.14b-stable
# ./configure --prefix=/usr/local/libevent/ # make
# make install

9.memcached 最新的穩定版:wget http://memcached.googlecode.com/files/memcached-1.4.5.tar.gz # tar -zxvf memcached-1.4.5.tar.gz
# cd memcached-1.4.5 # ./configure --prefix=/usr/local/memcached --with-libevent=/usr/local/libevent/ # make
# make install
啟動Memcached
# cd /usr/local/memcached/bin/ # ./memcached -u root -d
將Memcached加入系統自動啟動
# vim /etc/rc.local
# /usr/local/memcached/bin/memcached -u root -d
查看Memcached
# ps -ef |grep memcached

10.然後你就要找到虛擬機的IP地址,可以在虛擬機下找運行ifconfig 例如:inet addr:192.168.0.109
11.在course_form_edit.html和course_forum_viem.html下修改swf:地址:(我的)當然是http://192.168.0.109:8086/了。(共六處)12.現在從虛擬機下啟動forum_svr.py就能啟動了。13.可能在windows下你訪問時可能還是會報伺服器拒絕的錯誤,說明虛擬機的鏈接地址還是請求不到虛擬機下的數據,可以在虛擬機下運行
iptables -I INPUT -i eth0 -p tcp --dport 8086 -j ACCEPT(為windows下實體機開辟一個8086埠),虛擬機防火牆不讓請求數據。
OK,現在windows下就可以請求到數據了。方便本地的調試了。

D. GoAgentStarting...WARNING:python-geventnotinstalled. 這怎麼解決

因為是warning,所以通常不用解決。通常error才需要解決人。

python-gevent是一個庫,用於處理事件,是基於libevent庫的。對於高性能的server有幫助。

在ubuntu下,可以這樣解決。

sudo apt-get install libevent-dev
sudo apt-get install python-all-dev
sudo apt-get install python-setuptools
sudo easy_install greenlet
sudo easy_install gevent

這里libevent是基礎。setuptools有可能已安裝成功。接下來是安裝greenlet。greenlet可能需要一些支持庫,不過在ubuntu下,它會自動幫你找到,並安裝。

熱點內容
安卓平板微軟平板和蘋果哪個好 發布:2025-07-12 19:09:37 瀏覽:413
資料庫地區 發布:2025-07-12 19:05:41 瀏覽:395
如何檢查vds腳本 發布:2025-07-12 19:04:24 瀏覽:908
命令行編譯vs2013 發布:2025-07-12 19:01:22 瀏覽:808
c語言輸出所有素數 發布:2025-07-12 19:01:19 瀏覽:659
查電費賬號密碼多少 發布:2025-07-12 18:56:19 瀏覽:545
吉利遠景x1標配配置有哪些 發布:2025-07-12 18:56:18 瀏覽:533
智能演算法pdf 發布:2025-07-12 18:46:07 瀏覽:400
php生成短鏈接 發布:2025-07-12 18:44:37 瀏覽:843
sql表的聯合 發布:2025-07-12 18:44:30 瀏覽:664