• python的网络库


        最近新功能上线,帮忙加了几个监控脚本。上次用的perl,语法太随意了,看起来很是不整洁,自己写的都觉得不好,更不要说给别人看。好久没用python了,反正这次准备使用新的监控设计方案,刚好换一下。

        用perl写的是第一次做监控脚本,什么都不知道,看着别人的逻辑来写。觉得不是很好,一个脚本只监控一个功能,太多的重复工作和体力劳动,布置、统计也不方便。这次把它们都集中到一起,并抽象出黑箱监控的一些参数,一套东东搞定。其实逻辑很简单,就像下图所示。

        麻烦的地方在于,以前是用socket做通信,这次为了方便,直接用python的库去做request。前后用了urllib2,httplib,httplib2。

        urllib2在我的机器上建立连接用了1秒钟,要知道我用浏览器去访问总时间也不过几百ms(包括加载图片、CSS、JS等)。监控用的那台机python还是2.4,没有超时设置接口,用了一个计时器在超时的时候做close并在代码里捕获异常。最后还是因为太慢,转用httplib。

        httplib建立一个就很快了,不过做request和read还是慢,要比浏览器慢上200到300ms。一样没有超时设置,发现httplib的read在开始的时候如果发现文件被关闭的话会返回长度为0的字符串,这个不是我所要的。自己去修改它的代码,加上了超时设置并在read的时候加上了异常。基本可以用,不过还是觉得在read的时候比较慢,估计是一些内存拷贝的算法太差。

        实在受不了这种慢动作。用perl写的一个脚本实现同样功能要比这个快得多,后来找到一个httplib2,感觉对HTTP的支持要完善得多,另外也可以做超时设置(但似乎在read开始后就无效?)。

        我的机器环境比较慢一点,三个库做同一个request所用的时间大概是:

    urllib2    1.2s

    httplib    800ms

    httplib2  400ms

    总结:

    1)虽然python 2.4相同逻辑比perl慢,但因为代码风格比较好控制,后续还是尽量考虑使用python

    2)不同的库实现不同,用python的时候注意在比较慢的情况下考虑使用其他库。

  • 相关阅读:
    Blend操作入门: 别站在门外偷看,快进来吧!
    Egyee,这个世界很美丽
    在Windows Azure中使用自己的域名
    Windows Azure服务购买,收费,使用注意事项及学习资料推荐
    Silverlight怎样加载xap中的各个程序集
    WCF RIA Service随想
    Silverlight布局,也许不止这么多(附照片墙示例及源码)
    An introduction to variable and feature selection
    Compressed Learning
    Robust PCA (摘抄)
  • 原文地址:https://www.cnblogs.com/sunyongyue/p/1899528.html
Copyright © 2020-2023  润新知