python
文章平均质量分 57
laputa73
学到老
展开
-
stackless python的疑问
学习到hacksack这一节,发现一个问题。在达到指定次数时,circle中的成员依次pop,并发送exit消息退出然而,从实际输出来看并非如此,主进程随机地在某个成员退出的时候就一起结束了。修改了一下源码,改成每kick 5 次,剩下的成员继续kick.这样更明显理论上说,应该出现成员逐个退出的情况实际上,却经常提前中断?调试发现,是receive处抛了异常,原创 2012-05-16 14:35:25 · 593 阅读 · 0 评论 -
python gevent调用系统命令
主要是抄峰云的这篇博客http://xiaorui.cc/2015/05/28/在python中使用gevent-subprocess实现shell调用/不过还是有一些小细节不同要用joinall来等待子协程完成有的情况需要异步调用,不用pipe就可以了配合web框架,把一些系统命令改造成web接口还是比较轻松的。#!/bin/env python#encoding=gbk#gevent+su...转载 2018-02-11 20:15:32 · 658 阅读 · 0 评论 -
python3的asyncio相关吐槽
python3.x开始正式支持异步io了,asyncio提供了异步事件循环和协程。还有asysnc/await语法。喜大普奔。pypi上一搜,aio*的模块还相当多。http,redis都有了。可惜,第一次尝试就挨了一闷棍。首先测试的是telnetlib3。这个和telnetlib一点都不一样啊,还没有例子。嗯,有一个例子,但是运行报错啦。好吧,再来看看aiohttp,网上有好多百万级并发的文章呢...原创 2018-03-02 16:26:18 · 2060 阅读 · 0 评论 -
[python]gevent+PyMysql实现mysql并行查询
PyMysql是pure python的mysql驱动,因此可以通过gevent实现协程化,从而实现基于协程的mysql查询.比基于多线程的连接池效率更高.(单纯查询场景,不考虑读写混合的事务问题)测试代码参考峰云的博客.在win7, python2/3环境测试通过#!/usr/bin/python# -*- coding: utf-8 -*-#测试gevent+PyMysql实现非阻塞查询...转载 2018-04-09 14:01:13 · 3145 阅读 · 3 评论 -
python的引用
被python的import引用折腾了两天.记录一下结论:f.py如果是引用同级目录的模块,py2直接import name.py3需要from . import如果是引用下级目录的模块 from dir import name不管是直接执行,还是python -m 执行都是一样的如果要引用上级目录或者平级目录的模块,有2个办法1是修改sys.path, append上级/平级目录的绝对目录(...原创 2018-04-14 22:46:07 · 377 阅读 · 0 评论 -
[python]python的反射
python虽然也是脚本,但是更像java一些,没有perl那样的黑魔法。有函数引用,但是没有解引用。只能通过字典来实现一般函数的反射。不过python的重点在于模块。对于模块,可以通过__import__来动态加载。对于模块内的函数调用,python提供了一系列辅助函数(getattr,hasattr等)#encoding=GBK#python 的 函数 反射def hello(n): p...原创 2018-04-23 16:14:10 · 276 阅读 · 0 评论 -
[python]字符串替换format和re.sub
python字符串的格式化函数format功能很强大,可以使用一个字典来替代多个格式化字串,可以用来实现类似模板的功能。(replace只能替换单个字符串,不适用)s2="discriminator {vrf} local {_bfdlocal} remote {_bfdremote}" para={'vrf':'xinxi','bfdlocal':'100','bfdremote':'200...原创 2018-04-25 21:48:29 · 1343 阅读 · 0 评论 -
[python]python的引用(续)
之前本来以为已经弄明白了,又被坑了几天。彻底做了多个实验验证了一下。1.python x.py或者python d1/x.py这种直接执行方式,会把x.py所在路径加入sys.path (p2,p3都一样)2.python -m x或者python -m d1.x p3会把执行的当前目录加入sys.path,但 p2仍然是把x.py所在目录加入sys.path3.对于相对引用(from ....原创 2018-04-28 17:15:39 · 170 阅读 · 0 评论 -
[python]python的反射(续)-exec
作为解释型脚本语言,本质上其实根本不存在反射的问题。因为任意字符串都可以解释为代码。perl中有eval, python中同样也有,不过细分成了eval和exec.这个可以算是终极的反射杀器,由于威力太大,python3中在语法上做了一些限制。允许exec导入到局部变量空间而不是全局空间。比模块的加载更近一步,我们可以把一部分代码,或者说规则、模板,保存在远程的集中服务器或者配置中心,然后动态通过...原创 2018-05-08 09:46:43 · 250 阅读 · 0 评论 -
[python]利用uuid和base64实现资源主键id
不想用mysql的自增id(造数据的时候会很麻烦),而且tiDB也不支持.而且主键希望和资源的业务属性是可对应的.比如设备就是域+ip,这样如果删除了再添加,主键不会改变.直接用uuid3,32字节的字符串有点太长,16byte的bytes操作又麻烦, 128bit的int又超过了mysql uint64的限制(拆2字节太麻烦)搜索了一下uuid的压缩方法,发现base64编码还是...原创 2018-05-21 13:04:06 · 1963 阅读 · 0 评论 -
[加解密]js/python/golang 兼容AES(CBC/ECB)加解密(1)--ECB模式
起因是象实现oracle兼容的加解密算法,结果折腾了好几天也没有搞定兼容的3des算法. 副产品是把aes的各种场景验证了一遍. 之前没有密码学基础,通过折腾,稍微了解了一点.AES是比3des更先进的加密算法,虽然现在也不可靠了. 加密的块处理模式分为ECB和CBC. ECB因为不安全,以及功能废弃.如果不考虑和php兼容,那么可一不用了. 块处理就设计一个填充模式,常见的填充模式...转载 2018-05-28 10:27:53 · 1938 阅读 · 0 评论 -
[加解密]js/python/golang 兼容AES(CBC/ECB)加解密(2)--CBC模式
CBC模式用起来差别不大,就是多了一个iv还是先来js的<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head&g原创 2018-05-28 11:12:26 · 1869 阅读 · 0 评论 -
[python]使用gevent+telnet实现并行登录路由器
python内置了telnetlib模块,这点比perl强不少。更好的是,利用gevent的猴子补丁,可以很容易地实现基于协程的并行登录。#!/bin/env python#encoding=utf-8 import geventfrom gevent import monkeymonkey.patch_all() #创建函数 def do_telnet(Host...原创 2018-01-29 11:44:43 · 691 阅读 · 0 评论 -
python web一锅烩(flask,gunicom,gevent,tornado)
先说几点结论:WSGI是webserver和webapp的接口协议,相当于以前的CGI。flask是一个支持WSGI的web框架,同时自带了WSGI server. 相当于perl的mojo.gunicorn是一个独立的WSGI server(其他的都是模块)。可以支持gevent.支持woker模式。 相当于nginx.gevent是python的非阻塞协程框架,包含了WSGI原创 2018-01-26 17:52:20 · 1372 阅读 · 0 评论 -
python geventhttpclient测试
计划移植一个无阻塞python的服务框架.首先要解决http client的使用.Gcurl已经多年无人维护.geventhttpclient这个号称比urllib2+gevent monkey快一倍.先简单试试.#!/bin/env python# -*- coding: gbk -*-#使用poolimport geventimport gevent.pool原创 2018-01-22 18:37:11 · 1276 阅读 · 0 评论 -
stackless python hackysack问题续
经过一天的测试和思考。 终于搞明白了一点, 如果协程向自己发送消息 那么不但该协程会立即退出。而且主进程也会退出。原因估计是stackless python认为遇到了消息循环该异常不可以被捕获。(但是发送失败的异常可以捕获) 以下为测试实例#coding=gbk#测试一下多个微线程的情况import stacklessimport sysimpo原创 2012-05-17 13:27:36 · 1204 阅读 · 0 评论 -
吐槽python之snmp
计划逐步在网管开发中引入python习惯了perl, 发现python居然没有没有CPAN T_T,不过还有PYPI ^_^接下来的问题就是,python没有snmp包。粗略一搜有2个选择,用net-snmp的perl binding,或者用原生的pysnmp(速度慢一倍)对比perl的海量应用和文档,python这方面几乎就是空白。。。网上的文章基本就是抄来抄去什么多线程原创 2012-07-06 16:19:22 · 8962 阅读 · 0 评论 -
pysnmp的安装
pysnmp的安装pysnmp的网站:http://pysnmp.sourceforge.net/ pysnmp依赖两个第三方的python库:(1) ASN.1 : Structure of Management Information:管理信息结构用于定义通过网络管理协议可访问的对象的规则。SMI定义在MIB中使用的数据类型及网络资源在MIB中的名称或表示。转载 2012-07-06 18:35:49 · 4677 阅读 · 0 评论 -
pysnmp的first look
pysnmp支持很多特性,先从最简单的v1同步方式入手初看还比较简单、遗留问题:如何区分v1和v2c(0代表v1,1代表v2c)结果的类型处理(python是强类型的,处理起来比perl麻烦许多) #!/usr/bin/env python# -*- coding: iso-8859-1 -*-# GET Command Generator#同步方式的snmpg原创 2012-07-09 11:28:39 · 1462 阅读 · 0 评论 -
pysnmp性能再测试
这次使用snmpgettable方法来测试getnext方法的性能,获取ifindex节点,大约74条数据,可样可以避免循环对测试结果的影响。c的time snmpwalk -c public 192.168.6.87 ifindexreal 0m0.480suser 0m0.077ssys 0m0.029s-bash-3.00$perl的原创 2012-07-09 16:15:57 · 1633 阅读 · 0 评论 -
psnmp性能测试
把简单程序改造成支持timeit测试的格式。使用实验室的cisco26进行测试。 #!/usr/bin/env python# -*- coding: iso-8859-1 -*-# GET Command Generator#同步方式的snmpget性能测试from pysnmp.entity.rfc3413.oneliner import cmdgen原创 2012-07-09 15:33:59 · 1711 阅读 · 0 评论 -
stackless实现并行ping
ping的源码http://techpool.iteye.com/blog/661864非阻塞式的socket stacklesssocket.py下载http://code.google.com/p/stacklessexamples/wiki/StacklessNetworking参考了张沈鹏的抓网页演示。 说明:python的原生socket实现是阻塞式的,所以即原创 2012-05-18 14:21:59 · 2810 阅读 · 0 评论 -
对stackless python很失望
经过这几天对pysnmp的改造以及mping的测试对stackelss很失望主要是开始对它期待太高作为玩具还可以商业使用成熟度太低。问题太多了。用作mping居然会出现结果不对的情况。也许整个系统从全部底层开始构造会解决这个问题,但是那样成本太高了。毕竟,俺只是个消费者。不可能都从底层socket开始做起。还是先转向erlang/nodejs吧。等以后有空时在研原创 2012-07-10 17:10:13 · 2815 阅读 · 1 评论 -
[python]gevent学习(1)
之前测试了stackless,感觉不太好.不过python作为最火的脚本语言,还是吸引力难挡.python的协程方案,除了stackless,还有greenlet,相应的事件框架也有gevent ,eventlet等.先看gevent.0.x版的gevent是基于libevent的,安装比较简单.还支持windows,先看这个.1.x版的 gevent改成了libev的,原创 2013-09-30 12:04:39 · 3002 阅读 · 0 评论 -
[python]gevent学习(3)-snmp
之前用stacklesssocket+pysnmp没有成功.这次尝试gevent的patch,居然成功了.这个还是原型,没有处理snmp的异常不过确实可以实现并行snmpget的功能.而且代码基本没有改变. #!/bin/env python# -*- coding: utf-8 -*-##coding=gbk#使用gevent改造pysnmp,实现并行snmp原创 2013-10-08 10:20:53 · 1467 阅读 · 2 评论 -
gevent学习2- 并行ping
前面stackless因为socket不兑的问题被放弃,来看看gevent的表现.gevent的动人之处也是号称通过gevent.monkey.patch_all()可以实现原有标准库的协程化.#!/bin/env python# -*- coding: utf-8 -*-##coding=gbk#使用gevent改造ping.py,实现并行ping""" mping.原创 2013-09-30 15:31:39 · 2978 阅读 · 0 评论 -
[python]python3一致性hash
算法很简单,代码根据网上改的移植到python3不过量少场景, 一致性hash不均匀的问题很难解决,加虚拟节点也不是很管用# -*- coding: utf-8 -*-import hashlib class ConHash(object): def __init__(self, nodes=None, n_number=16): """ ...原创 2018-11-06 14:08:29 · 1167 阅读 · 1 评论