之前测试了stackless,感觉不太好.

不过python作为最火的脚本语言,还是吸引力难挡.

python的协程方案,除了stackless,还有greenlet,

相应的事件框架也有gevent ,eventlet等.

先看gevent.

.x版的gevent是基于libevent的,安装比较简单.还支持windows,先看这个.

.x版的 gevent改成了libev的, 还需要安转cython,而且没有windows版的...

先来经典的击鼓传花

[python] view plain copy
#!/bin/env python
# -*- coding: utf- -*-
#gevent版的击鼓传花(erlang和stackless的经典例子)
#由n个节点组成一个环状网络,在上面传送共m个消息。
#将每个消息(共m个),逐个发送给1号节点。
#第1到n-1号节点在接收到消息后,都转发给下一号节点。
#第n号节点每次收到消息后,不再继续转发。
#当m个消息都从1号逐个到达第n号节点时,认为全部处理结束。
#每次执行时设定n=,m= import gevent
from gevent.queue import Queue
import sys if len(sys.argv) < :
n=
m=
else:
n=int(sys.argv[])
m=int(sys.argv[]) print('start with n=%s,m=%s' % (n,m)) #创建队列
ch=range(,n)
for i in xrange(,n):
ch[i-] = Queue() #结果队列
#result= Queue() #定义节点(协程)
def node(i):
while True:
msg = ch[i-].get()
print('node %s got msg %s' % (i, msg))
if i==n-:
print ('msg %s reach last node %s' % (msg,i));
else:
ch[i].put_nowait(msg)
if msg>=m-:
print('final msg %s got,node %s quit' % (msg,i));
break #初始化消息
for k in xrange(,m):
print('send %s to node %s' % (k,))
ch[].put_nowait(k) #创建节点(协程)
nodes=range(,n)
for j in xrange(,n):
nodes[j-] = gevent.spawn(node, j) gevent.joinall(nodes) #[root@search2 test]# time ./tgering.py
#real 0m0.803s
#user 0m0.785s
#sys 0m0.017s
#[root@search2 test]# time ./tgering.py
#real 0m2.499s
#user 0m2.469s
#sys 0m0.028s
#[root@search2 test]# time ./tgering.py
#real 0m2.201s
#user 0m2.190s
#sys 0m0.009s
#[root@search2 test]# time ./tgering.py
#real 0m7.082s
#user 0m7.067s
#sys 0m0.009s 这个性能还是很可观的. 公平起见,在相同环境测试了一下perl的coro性能(基于EV) 两者的差距在可以接受的范围. [python] view plain copy
#[root@search2 perl]# time ./tring.pl
#real 0m1.148s
#user 0m1.128s
#sys 0m0.016s
#[root@search2 perl]# time ./tring.pl
#real 0m3.865s
#user 0m3.836s
#sys 0m0.025s
#[root@search2 perl]# time ./tring.pl
#real 0m10.564s
#user 0m10.529s
#sys 0m0.024s
#[root@search2 perl]#

参考资料:

http://blog.csdn.net/laputa73/article/details/12190317

【python】gevent学习的更多相关文章

  1. Python gevent学习笔记

    gevent是Python的一个用于网络IO的函数库,其中应用到了 coroutine(协同程序) 的思想.首先来了解下目前网络框架的几种基本的网络I/O模型: 阻塞式单线程:这是最基本的I/O模型, ...

  2. Python gevent学习笔记-2

    在上一篇里面介绍了gevent的最主要的功能,先来来了解一下gevent里面一些更加高级的功能. 事件 事件是一种可以让greenlet进行异步通信的手段. ? 1 2 3 4 5 6 7 8 9 1 ...

  3. python 协程库gevent学习--gevent数据结构及实战(四)

    一不留神已经到第四部分了,这一部分继续总结数据结构和常用的gevent类,废话不多说继续. 1.Timeout错误类 晚上在调试调用第三方接口的时候,发现有些接口耗时非常多,觉得应该有个超时接口来限制 ...

  4. python 协程库gevent学习--gevent数据结构及实战(三)

    gevent学习系列第三章,前面两章分析了大量常用几个函数的源码以及实现原理.这一章重点偏向实战了,按照官方给出的gevent学习指南,我将依次分析官方给出的7个数据结构.以及给出几个相应使用他们的例 ...

  5. python高级学习目录

    1. Linux介绍.命令1.1. 操作系统(科普章节) 1.2. 操作系统的发展史(科普章节) 1.3. 文件和目录 1.4. Ubuntu 图形界面入门 1.5. Linux 命令的基本使用 1. ...

  6. 【原】Learning Spark (Python版) 学习笔记(三)----工作原理、调优与Spark SQL

    周末的任务是更新Learning Spark系列第三篇,以为自己写不完了,但为了改正拖延症,还是得完成给自己定的任务啊 = =.这三章主要讲Spark的运行过程(本地+集群),性能调优以及Spark ...

  7. 60分钟Python快速学习(给发哥一个交代)

    60分钟Python快速学习 之前和同事谈到Python,每次下班后跑步都是在听他说,例如Python属于“胶水语言啦”,属于“解释型语言啦!”,是“面向对象的语言啦!”,另外没有数据类型,逻辑全靠空 ...

  8. python爬虫学习(1) —— 从urllib说起

    0. 前言 如果你从来没有接触过爬虫,刚开始的时候可能会有些许吃力 因为我不会从头到尾把所有知识点都说一遍,很多文章主要是记录我自己写的一些爬虫 所以建议先学习一下cuiqingcai大神的 Pyth ...

  9. python爬虫学习 —— 总目录

    开篇 作为一个C党,接触python之后学习了爬虫. 和AC算法题的快感类似,从网络上爬取各种数据也很有意思. 准备写一系列文章,整理一下学习历程,也给后来者提供一点便利. 我是目录 听说你叫爬虫 - ...

  10. Python正则表达式学习摘要及资料

    摘要 在正则表达式中,如果直接给出字符,就是精确匹配. {m,n}? 对于前一个字符重复 m 到 n 次,并且取尽可能少的情况 在字符串'aaaaaa'中,a{2,4} 会匹配 4 个 a,但 a{2 ...

随机推荐

  1. 湖南大学ACM程序设计新生杯大赛(同步赛)H - Yuanyuan Long and His Ballons

    题目描述 Yuanyuan Long is a dragon like this picture?                                     I don’t know, ...

  2. Python并发编程-生产消费模型

    生产消费模型初步 #产生两个子进程,Queue可以在子进程之间传递消息 from multiprocessing import Queue,Process import random import t ...

  3. Android Service AIDL

    http://blog.csdn.net/liuhe688/article/details/6400385 在Android中,如果我们需要在不同进程间实现通信,就需要用到AIDL技术去完成. AID ...

  4. https请求过程

    我们都知道HTTPS能够加密信息,以免敏感信息被第三方获取.所以很多银行网站或电子邮箱等等安全级别较高的服务都会采用HTTPS协议. HTTPS简介 HTTPS其实是有两部分组成:HTTP + SSL ...

  5. hibernate 基于主键的单向一对一关联映射

    1.设计表结构 表结构对于基于外键的关联关系来说就少了外键的关联列,并且两张表共用同一个ID,表示一对一. 2.创建Person对象 3.创建IdCard对象 4.写hbm.xml文件 5.生成数据库 ...

  6. luogu P2619 [国家集训队2]Tree I

    题目链接 luogu P2619 [国家集训队2]Tree I 题解 普通思路就不说了二分增量,生成树check 说一下坑点 二分时,若黑白边权有相同,因为权值相同优先选白边,若在最有增量时出现黑白等 ...

  7. 【可持久化并查集】BZOJ3673-可持久化并查集 by zky

    颓了十多天别问我再干嘛,在补学校作业 啊,开学了……我的夏天…… [题目大意] n个集合 m个操作 操作: 1 a b 合并a,b所在集合 2 k 回到第k次操作之后的状态(查询算作操作) 3 a b ...

  8. 如何解决The underlying provider failed on Open问题

    转自codeproject,找了半天解决办法,这个最靠谱. 我数据库用的EF做ORM,在vs里面测试的时候不会出现这个错误,用IIS就出错了.解决方法如下 Solution for "The ...

  9. bzoj 1503: [NOI2004]郁闷的出纳员 -- 权值线段树

    1503: [NOI2004]郁闷的出纳员 Time Limit: 5 Sec  Memory Limit: 64 MB Description OIER公司是一家大型专业化软件公司,有着数以万计的员 ...

  10. bzoj1393 旅游航道

    Description SGOI旅游局在SG-III星团开设了旅游业务,每天有数以万计的地球人来这里观光,包括联合国秘书长,各国总统和SGOI总局局长等.旅游线路四通八达,每天都有总躲得载客太空飞船在 ...