练习-libev和pyev示例

事件循环,IO复用,还是理解深刻一点好。

比较LIBEV和PYEV,发现PYTHON库只是对LIBEV作了简单的语法转换。

到了这个层次,就一个字:DIAO!!!

libev的C版:

#include <ev.h>
#include <stdio.h>

ev_io stdin_watcher;
ev_timer timeout_watcher;

static void stdin_cb (EV_P_ ev_io *w, int revents)
{
    puts ("stdin ready");

    ev_io_stop (EV_A_ w);

    ev_break (EV_A_ EVBREAK_ALL);
}

static void timeout_cb(EV_P_ ev_timer *w, int revents)
{
    puts("timeout");

    ev_break (EV_A_ EVBREAK_ONE);
}

int main(void)
{
    struct ev_loop *loop = EV_DEFAULT;
    ev_io_init(&stdin_watcher, stdin_cb, 0, EV_READ);
    ev_io_start(loop, &stdin_watcher);

    ev_timer_init(&timeout_watcher, timeout_cb, 5.5, 0.);
    ev_timer_start(loop, &timeout_watcher);

    ev_run(loop, 0);

    return 0;
}

 

############注意编译命令里,除了指定输出文件,还要指定依赖的库哟

gcc -lev -o test test.c

 

pyev的PYTHON版:

import signal
import pyev

def sig_cb(watcher, revents):
    print("got SIGINT")
    loop = watcher.loop
    # optional - stop all watchers
    if loop.data:
        print("stopping watchers: {0}".format(loop.data))
        while loop.data:
            loop.data.pop().stop()
    # unloop all nested loop
    print("stopping the loop: {0}".format(loop))
    loop.stop(pyev.EVBREAK_ALL)

def timer_cb(watcher, revents):
    watcher.data += 1
    print("timer.data: {0}".format(watcher.data))
    print("timer.loop.iteration: {0}".format(watcher.loop.iteration))
    print("timer.loop.now(): {0}".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复用监听事件的流程图:

 

时间: 2024-08-01 22:33:53

练习-libev和pyev示例的相关文章

Muduo 网络编程示例(六)限制服务器的最大并发连接数

本文已以大家都熟悉的 EchoServer 介绍如何限制服务器的并发连接数. 本文的代码见 http://code.google.com/p/muduo/source/browse/trunk/examples/maxconnection/ <Muduo 网络 编程示例 系列>计划中的第六篇文章原本是"用于测试两台机器的带宽的 pingpong 程序", pingpong 协议的程序已经在<muduo 与 boost asio 吞吐量对比>和<muduo

使用 libevent 和 libev 提高网络应用性能的方法_Linux

有许多解决方案,但是 libevent 库和 libev 库能够大大提高性能和事件处理能力.在本文中,我们要讨论在 UNIX 应用程序中使用和部署这些解决方案所用的基本结构和方法.libev 和 libevent 都可以在高性能应用程序中使用,包括部署在 IBM Cloud 或 Amazon EC2 环境中的应用程序,这些应用程序需要支持大量并发客户端或操作. 简介 许多服务器部署(尤其是 web 服务器部署)面对的最大问题之一是必须能够处理大量连接.无论是通过构建基于云的服务来处理网络通信流,

用PHP执行Oracle存储过程示例

oracle|存储过程|示例|执行 <?//在oracle中执行存储过程示例//供大家参考$gConn=ocilogon("test","test"); /* OCIDefineByPos example thies@digicol.de (980219) *///discrate与nEcode是out parameter,其余均是 in parameter.//存储过程get_discrate存放于package ebiz_pg中.$stmt = OCIPa

Android ApiDemos示例解析(26):App-&amp;gt;Notification-&amp;gt;IncomingMessage

应用程序可以使用Notifications来通知用户某个事件发生了(如收到短信).类NotificationManager 用来处理 Notification, NotificationManager可以: 在Status Bar上显示一个新的图标. 在Extended status bar 窗口上显示附加信息或是启动一个Activity. 显示背光/LED. 使设备震动. 发出声音等. 对于一些没有UI的应用程序组件(如Broadcast Receiver, Services)或是非活动状态的

jquery清空表单数据示例分享

 这篇文章主要介绍了jquery清空表单数据的示例,需要的朋友可以参考下  代码如下: function clearForm(form) {   // iterate over all of the inputs for the form   // element that was passed in   $(':input', form).each(function() {     var type = this.type;     var tag = this.tagName.toLower

用php+oracle实现分页的示例程序

oracle|程序|分页|示例 <html><body><?include "/maya/inc/dbconn.php";$sql="select max(rownum) from xqhtest where id<50";$stmt=ociparse($gConn,$sql);ociexecute($stmt);ocifetch($stmt);$rowcount=ociresult($stmt,1);ocifreestateme

PHP开发框架Yii Framework教程(24) 数据库-DAO示例

据访问对象(DAO) 对访问存储在不同数据库管理系统(DBMS)中的数据提供了一个通用的API. 因此,在将底层 DBMS 更 换为另一个时,无需修改使用了 DAO 访问数据的代码. Yii DAO 基于 PHP Data Objects (PDO) 构建.它是一个为众多 流行的DBMS提供统一数据访问的扩展,这些 DBMS 包括 MySQL, PostgreSQL 等等.因此,要使用 Yii DAO,PDO 扩展和特定的 PDO 数据库驱动(例如PDO_MYSQL) 必须安装. Yii DAO

js与xml交互理论和示例

---------------------------------------------------js+xml--------------------------------------------------------------------------- DOM2级在 document.implementation 中引入了 createDocument() 方法. IE9+. Firefox. Opera. Chrome 和 Safari 都支持这个方法. 想一想, 或许你还记得可以

百度编辑器UEditor ASP.NET示例Demo

在百度编辑器示例代码基础上进行了修改,封装成类库,只需简单配置即可使用. 完整demo下载