python网络库也有了基于协程的实现,比较著名的是 gevent、eventlet 它两之间的关系可以参照

Comparing gevent to eventlet, 本文主要简单介绍一下eventlet一个例子

客户端:

import eventlet
from eventlet.green import urllib2

def myfetch(myurl, i):
req = urllib2.Request(myurl)
req.add_header('User-agent', 'Mozilla 5.10')
res = urllib2.urlopen(req, timeout = 4)
body = res.read();
size = len(body);
print (i, 'body size ' ,size)
return size

myurl = "http://127.0.0.1:6000"
pool = eventlet.GreenPool(1000)
for i in range(1, 200):
pool.spawn(myfetch, myurl, i)
#print i
pool.waitall()
print "--finish --GreenPool"
服务端:

#! /usr/bin/env python
"""\
Simple server that listens on port 6000 and echos back every input to
the client. To try out the server, start it up by running this file.
Connect to it with:
telnet localhost 6000
You terminate your connection by terminating telnet (typically Ctrl-]
and then 'quit')
"""
from __future__ import print_function

import eventlet

def handle(fd): #单个协程的处理逻辑
print("client connected")
while True:
# pass through every non-eof line
x = fd.readline()
if not x:
break
fd.write(x)
fd.flush()
print("echoed", x, end=' ')
print("client disconnected")

print("server socket listening on port 6000")
server = eventlet.listen(('0.0.0.0', 6000)) #监听6000端口
pool = eventlet.GreenPool() #构造协程池
while True:
try:
new_sock, address = server.accept() #accept新的连接
print("accepted", address)
pool.spawn_n(handle, new_sock.makefile('rw')) #将新的连接交由一个新的协程去处理
except (SystemExit, KeyboardInterrupt):
break
上面的例子可以看出eventlet接口还是非常的简洁和优雅的,至于稳定性和成熟度还待真实的场景去验证,
使用eventlet快速开发一个tcp/http的server还是非常迅速的,因为是基于协程的, 对于网络IO密集型的场景
速度不会太差.
eventlet已知的在openstack项目中有使用.
---------------------
作者:mumumuwudi
来源:CSDN
原文:https://blog.csdn.net/mumumuwudi/article/details/47116493
版权声明:本文为博主原创文章,转载请附上博文链接!

最新文章

  1. PLL失锁
  2. AndroidManifest.xml中<activity></activity>相关属性说明
  3. C++学习基础九——继承
  4. sql server版本
  5. qt opencv
  6. 二、secureCRT的 使用过程
  7. oracle中to_date() 与 to_char() 日期和字符串转换
  8. POJ1149 PIGS
  9. [Windows Phone] 以多国语言做为开发前提 (2)
  10. 【转载】quickLayout.css-快速构建结构兼容的web页面
  11. [转载] 布隆过滤器(Bloom Filter)详解
  12. Spark算子--flatMapValues
  13. SQL中内连接和外连接的问题!
  14. 【纯·技术干货】更 App 化的小程序开发
  15. Python中日期和时间格式化输出的方法
  16. python 算术运算
  17. dp乱写1:状态压缩dp(状压dp)炮兵阵地
  18. Jenkins mac pkg安装 后默认配置文件/启动路径
  19. MySQL加载配置文件的顺序
  20. 51nod 1266 蚂蚁

热门文章

  1. VS2010/MFC编程入门之二十(常用控件:静态文本框)
  2. kylin与superset整合
  3. SecureCRT 会话空闲时超时退出处理
  4. 浅谈JS严格模式
  5. STM32端口输入输出模式配置
  6. VC/MFC 编程技巧大总结
  7. git squash 和 git rebase
  8. "CMAKE_CXX_COMPILER-NOTFOUND"
  9. 雷林鹏分享:JSP 开发环境搭建
  10. 80端口未被占用,无法启动wamp的解决方法(原创)