gevent学习2- 并行ping
来源:互联网 发布:pano.js 编辑:程序博客网 时间:2024/05/25 23:25
前面stackless因为socket不对的问题被放弃,来看看gevent的表现.
gevent的动人之处也是号称通过gevent.monkey.patch_all()可以实现原有标准库的协程化.
#!/bin/env python# -*- coding: utf-8 -*-##coding=gbk#使用gevent改造ping.py,实现并行ping""" mping.py"""import geventfrom gevent.queue import Queueimport sysimport pingfrom gevent import monkey#monkey.patch_all()monkey.patch_socket()monkey.patch_select()monkey.patch_time()ICMP_DATA_STR = 56 #创建函数def pingip(i): ip="192.168.6.2%d" % i print ip ping.pingNode(alive=0, timeout=1.0, ipv6=0, number=3, \ node=ip, flood=0, size=ICMP_DATA_STR) #创建协程 nodes = []for i in xrange(1,6): nodes.append(gevent.spawn(pingip, i))#开始运行gevent.joinall(nodes)
测试结果很遗憾,还是有问题. 不开启patch,顺序执行,结果正确,一旦开启patch,则数据错误
怀疑是select 的patch有问题?
这也许是原有模块的书写不规范,但是至少说明不能盲目信赖gevent的patch功能
换成pypi上的gping模块,则可以正确实现.
#!/bin/env pythonimport gpingdef test_callback(ping): print ping gp = gping.GPing()ips = []for i in xrange(1,10): ips.append("192.168.25.%d" % i)for ip in ips: gp.send(ip,test_callback)gp.join()
比较了一下,gping是自己实现的超时判断
而pyping用的select判断超时
说明gevent的selectt patch不够完善?
- gevent学习2- 并行ping
- coro学习2-并行ping
- AnyEvent学习之2 -并行ping
- Gevent学习
- [python]gevent学习(1)
- gevent学习笔记
- stackless实现并行ping
- gevent
- GEVENT
- gevent
- gevent
- [python]gevent学习(3)-snmp
- python: gevent轻松实现并行下载多个文件
- gunicorn+gevent实现 flask web 应用的并行访问
- 并行计算-学习笔记2
- gevent 学习笔记 —— greenlet
- gevent 学习笔记 —— greenlet源码剖析1
- python并发编程gevent模块以及猴子补丁学习
- MapReduce_V1总结
- IntelliJ IDEA、ReSharper、WebStorm创业公司购买全部5折
- 数据结构(9)之树的补充(赫夫曼树;线索二叉树树;树与二叉树转换)
- Linux cpufreq 机制详细解析
- 远程注入DLL(简单描述)
- gevent学习2- 并行ping
- Unicode与UCS的历史恩怨
- log device is empty!
- ui更新数据库 记录
- Java中对象的复制
- 递归与分治策略
- Smart Client Software Factory "Add View (with presenter)" 等菜单不出来
- cgroup--blkio子系统测试-2(配合fio 做weight测试)
- cygwin下git图形界面gitk和git gui安装