練習 libev和pyev示例

2021-09-22 23:48:38 字數 1945 閱讀 3880

事件迴圈,io復用,還是理解深刻一點好。

比較libev和pyev,發現python庫只是對libev作了簡單的語法轉換。

到了這個層次,就乙個字:diao!!!

libev的c版:

#include #include 

ev_io stdin_watcher;

ev_timer timeout_watcher;

static

void stdin_cb (ev_p_ ev_io *w, int

revents)

static

void timeout_cb(ev_p_ ev_timer *w, int

revents)

int main(void

)

############注意編譯命令裡,除了指定輸出檔案,還要指定依賴的庫喲

gcc -lev -o test test.c
pyev的python版:

import

signal

import

pyev

defsig_cb(watcher, revents):

print("

got sigint")

loop =watcher.loop

#optional - stop all watchers

ifloop.data:

print("

stopping watchers:

".format(loop.data))

while

loop.data:

loop.data.pop().stop()

#unloop all nested loop

print("

stopping the loop:

".format(loop))

loop.stop(pyev.evbreak_all)

deftimer_cb(watcher, revents):

watcher.data += 1

print("

timer.data:

".format(watcher.data))

print("

timer.loop.iteration:

".format(watcher.loop.iteration))

print("

timer.loop.now():

".format(watcher.loop.now()))

if__name__ == "

__main__":

loop =pyev.default_loop()

#initialise and start a repeating timer

timer = loop.timer(0, 2, timer_cb, 0)

timer.start()

#initialise and start a signal watcher

sig =loop.signal(signal.sigint, sig_cb)

sig.start()

loop.data = [timer, sig] #

optional

#now wait for events to arrive

loop.start()

輸出:

對比網上的epoll的io復用監聽事件的流程圖:

libevent和libev的區別對比

兩個庫都是為非同步io排程而設計,在linux上都是使用epoll機制,在freebsd上則都是kqueue,還有諸如此類的很多相通之處。libev的誕生,是為了修復libevent設計上的一些錯誤決策。例如,全域性變數的使用,讓libevent很難在多執行緒環境中使用。watcher結構體很大,因...

libuv和libev 非同步I O庫的比較

libuv和libev,兩個名字相當相近的 i o library,最近有幸用兩個 library 都寫了一些東西,下面就來說一說我本人對兩者共同與不同點的主觀表述。高效能網路程式設計這個話題已經被討論爛了。非同步,非同步,還是非同步。不管是epoll也好,kqueue也罷,總是免不了非同步這個話題...

GMF 示例Mindmap 練習一

通過示例來做是我們it人士快速學習新技術的一種有效方法,在前一篇gmp 了解gmf引擎功能 graphical modeling framework 介紹了gmf的引擎功能,接下來將通過乙個示例mindmap 原始碼可以從這裡 生成乙個領域模型 生成乙個圖形定義模型和工具定義模型,定義編輯用的圖形元...