http://blog.csdn.net/mingzznet/article/details/38388299

前言:

虽然 eventlet 封装成了非常类似标准线程库的形式,但线程和eventlet在实际并发执行流程仍然有明显区别。在没有出现 I/O 阻塞时,除非显式声明,否则当前正在执行的 eventlet 永远不会把 cpu 交给其他的 eventlet,而标准线程则是无论是否出现阻塞,总是由所有线程一起争夺运行资源。所有 eventlet 对 I/O 阻塞无关的大运算量耗时操作基本没有什么帮助。

Eventlet 的基础是 greenlet,这是实现 "协程(Coroutine)" 的基础.协程又被称作 "微线程“,简单点说就是在一个原生线程上通过 "拷贝" 和 "切换" 堆栈帧数据来实现执行多个工作绪.看上去和传统的 "单CPU,多线程(Threading)" 执行方式差不多. swpan() 启动一个 GreenThread 执行目标函数,wait() 返回函数执行结果。

1
2
3
4
import eventlet
pool = eventlet.GreenPool()
while True:
     pool.spawn(func,args )

上面这段代码,几乎就是使用eventlet的范式:

GreenPool 用来实现协程,保证并行;

Spawn 用来调用相应的函数,完成具体业务

每个func之间切换,实施“你运行一会、我运行一会”,并且在进行切换时必须指定何时切换以及切换到哪,当出现阻塞时,就显式切换到另一段没有被阻塞的代码段执行,直到原先的阻塞状况消失以后,再人工切换回原来的代码段继续处理.

首先需要安装eventlet的相关模块

我们先简单跑一个demo !

他的用法其实和threading差不多的,都可以指定pool和函数的。(有点废话)

为啥叫他网络编程框架,因为他支持很多底层的东西,比如http,比如socket啥的。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
#! /usr/bin/env python
# -*- coding: UTF-8 -*-
from eventlet import api
def httpd(writer,reader):
    req=''
    while True:
        chunk=reader.readline()
        if not chunk:
            break
        req+=chunk
        if chunk=='\r\n':
            break
    data='Hello world!\r\n'
    writer.write('HTTP/1.1 200 OK\r\nContent-Length: %d\r\n\r\n%s'%(len(data),data))
    writer.close()
    reader.close()
    return
def main():
    try:
        server=api.tcp_listener(('0.0.0.0',3000))
        print 'Server started!'
        while True:
            conn,addr=server.accept()
            #print 'client %s connected!'%repr(addr)
            writer=conn.makefile('w')
            api.spawn(httpd,writer,conn.makefile('r'))
    except KeyboardInterrupt:
        pass
    return
if __name__=='__main__':
    main()

咱们来测试下这个用eventlet实现的http吧!

客户端访问下

下面是利用wait()堵塞行为,保证他是同步的运行。

python之高性能网络编程并发框架eventlet实例相关推荐

  1. python web服务框架-Python Web服务高并发框架【1】(Tornado)

    本节学习目标: (1)了解Tornado的特点 (2)了解Tornado工作流程 (3)掌握Tornado在Window及Linux中的安装 (4)理解同步.异步 (5)协程基础编程 本节课程内容: ...

  2. Python Gevent – 高性能的 Python 并发框架

    From:http://www.xuebuyuan.com/1604603.html Gevent 指南(英文):http://sdiehl.github.io/gevent-tutorial Gev ...

  3. 【网络】高性能网络编程--下一个10年,是时候考虑C10M并发问题了

    转载:http://www.52im.net/thread-568-1-1.html 1.前言 在本系列文章的上篇中我们回顾了过云的10年里,高性能网络编程领域著名的C10K问题及其成功的解决方案(上 ...

  4. python的交互式解释器_python3.4.1解释器python交互式图形编程实例(三)

    本文实例为大家分享了python交互式图形编程实例的第三部代码,供大家参考,具体内容如下 #!/usr/bin/env python3 # -*- coding: utf-8 -*- #时钟 from ...

  5. c 开发服务器的性能,高性能网络编程(三):下一个10年,是时候考虑C10M并发问题了...

    1.前言 在本系列文章的上篇中我们回顾了过云的10年里,高性能网络编程领域著名的C10K问题及其成功的解决方案(上篇请见:<高性能网络编程(二):上一个10年,著名的C10K并发连接问题> ...

  6. python图形化编程实例,python交互式图形编程实例(三)

    本文实例为大家分享了python交互式图形编程实例的第三部代码,供大家参考,具体内容如下 #!/usr/bin/env python3 # -*- coding: utf-8 -*- #时钟 from ...

  7. java 并发框架源码_Java并发编程高阶技术-高性能并发框架源码解析与实战

    Java并发编程高阶技术-高性能并发框架源码解析与实战 1 _0 Z' @+ l: s3 f6 r% t|____资料3 Z9 P- I2 x8 T6 ^ |____coding-275-master ...

  8. 高性能网络编程(三):下一个10年,是时候考虑C10M并发问题了

    1.前言 在本系列文章的上篇中我们回顾了过云的10年里,高性能网络编程领域著名的C10K问题及其成功的解决方案(上篇请见:<高性能网络编程(二):上一个10年,著名的C10K并发连接问题> ...

  9. python基础实例 韦玮 pdf_精通Python网络爬虫 核心技术、框架与项目实战 作者:韦玮PDF...

    文件目录: 书本介绍: 书名 精通Python网络爬虫:核心技术.框架与项目实战 作者 韦玮著 出版社 机械工业出版社 出版日期 2017 内容简介 本书从系统化的视角,为那些想学习Python网络爬 ...

最新文章

  1. 只有程序员才能读懂的西游记,又看了一遍西游记!
  2. Linux中的进程之初步了解
  3. php根据当前日期判断法定节假日_判断日期是否为法定节假日的API接口与示例函数...
  4. 全面解读:微信服务号升级和群发增至4条的应用方法
  5. MySQL抛出 Lock wait timeout exceeded; try restarting transaction
  6. 为什么电脑CPU这么贵?
  7. MySQL/MariaDB Tips
  8. c语言自动选课,C语言实现简单学生选课管理系统
  9. python毕业设计作品基于django框架校园排课选课系统毕设成品(6)开题答辩PPT
  10. 机器学习-分类Classification
  11. 张飞实战电子硬件工程师90天学习资料及笔记汇总
  12. php短信功能实现原理,基于信息熵原理分词的php实现
  13. [裴礼文数学分析中的典型问题与方法习题参考解答]4.3.26
  14. 阿里巴巴(菜鸟) - 算法工程师(机器学习)提前批笔试面试总结
  15. 液晶显示屏模组工艺流程是什么,液晶显示模组生产流程的意义
  16. 中国联通将 900MHz 频段频谱资源重耕用于 5G 系统,更有利用把5G网络覆盖到边远地区的每一寸土地
  17. 中止执行后超过2年_申请执行超过2年时效,法院还处理吗?
  18. MySQL(九):InnoDB 表空间(Tables)
  19. 千金都难买的到这张表
  20. uni-app 微信小程序根据角色动态的更改底部tabbar

热门文章

  1. docker-compose的一些理解
  2. Spring MVC(三) 数据转换、格式化、校验
  3. mysql之创建数据库,创建数据表
  4. CSS3属性 box-shadow
  5. WEB 开发异常:java.lang.ClassNotFoundException
  6. 企业级备份方案系列PART3:SCDPM 2012备份/恢复Exchange2010
  7. php实现从本网站每天出站连接向目标网站贡献的IP和PV的统计
  8. 最近找到了一个免费的python教程,两周学会了python开发
  9. SLAM技术的应用及发展现状
  10. 用concat批量生成MySQL查询语句