python之高性能网络编程并发框架eventlet实例
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实例相关推荐
- python web服务框架-Python Web服务高并发框架【1】(Tornado)
本节学习目标: (1)了解Tornado的特点 (2)了解Tornado工作流程 (3)掌握Tornado在Window及Linux中的安装 (4)理解同步.异步 (5)协程基础编程 本节课程内容: ...
- Python Gevent – 高性能的 Python 并发框架
From:http://www.xuebuyuan.com/1604603.html Gevent 指南(英文):http://sdiehl.github.io/gevent-tutorial Gev ...
- 【网络】高性能网络编程--下一个10年,是时候考虑C10M并发问题了
转载:http://www.52im.net/thread-568-1-1.html 1.前言 在本系列文章的上篇中我们回顾了过云的10年里,高性能网络编程领域著名的C10K问题及其成功的解决方案(上 ...
- python的交互式解释器_python3.4.1解释器python交互式图形编程实例(三)
本文实例为大家分享了python交互式图形编程实例的第三部代码,供大家参考,具体内容如下 #!/usr/bin/env python3 # -*- coding: utf-8 -*- #时钟 from ...
- c 开发服务器的性能,高性能网络编程(三):下一个10年,是时候考虑C10M并发问题了...
1.前言 在本系列文章的上篇中我们回顾了过云的10年里,高性能网络编程领域著名的C10K问题及其成功的解决方案(上篇请见:<高性能网络编程(二):上一个10年,著名的C10K并发连接问题> ...
- python图形化编程实例,python交互式图形编程实例(三)
本文实例为大家分享了python交互式图形编程实例的第三部代码,供大家参考,具体内容如下 #!/usr/bin/env python3 # -*- coding: utf-8 -*- #时钟 from ...
- java 并发框架源码_Java并发编程高阶技术-高性能并发框架源码解析与实战
Java并发编程高阶技术-高性能并发框架源码解析与实战 1 _0 Z' @+ l: s3 f6 r% t|____资料3 Z9 P- I2 x8 T6 ^ |____coding-275-master ...
- 高性能网络编程(三):下一个10年,是时候考虑C10M并发问题了
1.前言 在本系列文章的上篇中我们回顾了过云的10年里,高性能网络编程领域著名的C10K问题及其成功的解决方案(上篇请见:<高性能网络编程(二):上一个10年,著名的C10K并发连接问题> ...
- python基础实例 韦玮 pdf_精通Python网络爬虫 核心技术、框架与项目实战 作者:韦玮PDF...
文件目录: 书本介绍: 书名 精通Python网络爬虫:核心技术.框架与项目实战 作者 韦玮著 出版社 机械工业出版社 出版日期 2017 内容简介 本书从系统化的视角,为那些想学习Python网络爬 ...
最新文章
- 只有程序员才能读懂的西游记,又看了一遍西游记!
- Linux中的进程之初步了解
- php根据当前日期判断法定节假日_判断日期是否为法定节假日的API接口与示例函数...
- 全面解读:微信服务号升级和群发增至4条的应用方法
- MySQL抛出 Lock wait timeout exceeded; try restarting transaction
- 为什么电脑CPU这么贵?
- MySQL/MariaDB Tips
- c语言自动选课,C语言实现简单学生选课管理系统
- python毕业设计作品基于django框架校园排课选课系统毕设成品(6)开题答辩PPT
- 机器学习-分类Classification
- 张飞实战电子硬件工程师90天学习资料及笔记汇总
- php短信功能实现原理,基于信息熵原理分词的php实现
- [裴礼文数学分析中的典型问题与方法习题参考解答]4.3.26
- 阿里巴巴(菜鸟) - 算法工程师(机器学习)提前批笔试面试总结
- 液晶显示屏模组工艺流程是什么,液晶显示模组生产流程的意义
- 中国联通将 900MHz 频段频谱资源重耕用于 5G 系统,更有利用把5G网络覆盖到边远地区的每一寸土地
- 中止执行后超过2年_申请执行超过2年时效,法院还处理吗?
- MySQL(九):InnoDB 表空间(Tables)
- 千金都难买的到这张表
- uni-app 微信小程序根据角色动态的更改底部tabbar