利用python并发模块进行网站的状态检测

简介:

python  curl.py



 
 
  1. #!/usr/bin/python    

  2. # -*- coding: utf-8 -*-

  3. import httplib

  4. #连接服务器

  5. conn=httplib.HTTPConnection('www.dnspod.cn')

  6. #发送HTTP请求

  7. conn.request('GET','url')

  8. #得到结果

  9. result=conn.getresponse()

  10. #获取HTTP请求结果值。200为成功

  11. resultresultStatus=result.status

  12. print resultStatus

  13. #获取请求的页面内容  

  14. content=result.read()

  15. #关闭连接

  16. conn.close()

  17. #如果要模拟客户端进行请求,可以发送HTTP请求头

  18. headers={"Content-Type":"text/html;charset=gb2312"}

  19. conn.requeset('POST','url',headersheaders=headers)

  20. #带参数传送  

  21. params=urllib.urlencode({'key':'value'});

  22. conn.request('POST','url',body=params)

还有一个 模拟 浏览器的方式~



 
 
  1. #!/usr/bin/python

  2. # -*- coding: utf-8 -*-

  3. import httplib

  4. conn = httplib.HTTPConnection('www.hao123.com')

  5. conn.request('GET', '/', headers = {

  6.                                        "User-Agent" : "Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN; rv:1.9.1) Gecko/20090624 Firefox/3.5",

  7.                                        "Accept" : "*/*",

  8.                                        "Accept-Encoding" : "gzip,deflate",

  9. })

  10. res = conn.getresponse()

  11. #print conn.getresponse().status

  12. print res.status

  13. print res.msg

  14. #print res.read()

  15. conn.close()



下面是 并发的测试~    类似 ab 和 webbench~~~~



 
 
  1. # -*- coding: utf8 -*-

  2. import threading, time, httplib

  3. HOST = "www.baidu.com"; #主机地址 例如192.168.1.101

  4. PORT = 80 #端口

  5. URI = "/?123" #相对地址,加参数防止缓存,否则可能会返回304

  6. TOTAL = 0 #总数

  7. SUCC = 0 #响应成功数

  8. FAIL = 0 #响应失败数

  9. EXCEPT = 0 #响应异常数

  10. MAXTIME=0 #最大响应时间

  11. MINTIME=100 #最小响应时间,初始值为100秒

  12. GT3=0 #统计3秒内响应的

  13. LT3=0 #统计大于3秒响应的

  14. # 创建一个 threading.Thread 的派生类

  15. class RequestThread(threading.Thread):

  16.    # 构造函数

  17.    def __init__(self, thread_name):

  18.        threading.Thread.__init__(self)

  19. self.test_count = 0

  20.    # 线程运行的入口函数

  21.    def run(self):

  22.        self.test_performace()

  23.    def test_performace(self):

  24.            global TOTAL

  25.            global SUCC

  26.            global FAIL

  27.            global EXCEPT

  28.            global GT3

  29.            global LT3

  30.            try:

  31. st = time.time()

  32. conn = httplib.HTTPConnection(HOST, PORT, False)  

  33.                conn.request('GET', URI)

  34. res = conn.getresponse()  

  35.                #print 'version:', res.version  

  36.                #print 'reason:', res.reason  

  37.                #print 'status:', res.status  

  38.                #print 'msg:', res.msg  

  39.                #print 'headers:', res.getheaders()

  40.                start_time

  41.                if res.status == 200:

  42.                    TOTAL+=1

  43.                    SUCC+=1

  44.                else:

  45.                    TOTAL+=1

  46.                    FAIL+=1

  47. timetime_span = time.time()-st

  48.                print '%s:%f\n'%(self.name,time_span)

  49.                self.maxtime(time_span)

  50.                self.mintime(time_span)

  51.                if time_span>3:

  52.                    GT3+=1

  53.                else:

  54.                    LT3+=1                    

  55.            except Exception,e:

  56.                print e

  57.                TOTAL+=1

  58.                EXCEPT+=1

  59.            conn.close()

  60.    def maxtime(self,ts):

  61.            global MAXTIME

  62.            print ts

  63.            if ts>MAXTIME:

  64. MAXTIME=ts

  65.    def mintime(self,ts):

  66.            global MINTIME

  67.            if ts<MINTIME:

  68. MINTIME=ts

  69. # main 代码开始

  70. print '===========task start==========='

  71. # 开始的时间

  72. start_time = time.time()

  73. # 并发的线程数

  74. thread_count = 300

  75. i = 0

  76. while i <= thread_count:

  77. t = RequestThread("thread" + str(i))

  78.    t.start()

  79.    i += 1

  80. t=0

  81. #并发数所有都完成或大于50秒就结束

  82. while TOTAL<thread_count|t>50:

  83.        print "total:%d,succ:%d,fail:%d,except:%d\n"%(TOTAL,SUCC,FAIL,EXCEPT)

  84.        print HOST,URI

  85.        t+=1

  86.        time.sleep(1)

  87. print '===========task end==========='

  88. print "total:%d,succ:%d,fail:%d,except:%d"%(TOTAL,SUCC,FAIL,EXCEPT)

  89. print 'response maxtime:',MAXTIME

  90. print 'response mintime',MINTIME

  91. print 'great than 3 seconds:%d,percent:%0.2f'%(GT3,float(GT3)/TOTAL)

  92. print 'less than 3 seconds:%d,percent:%0.2f'%(LT3,float(LT3)/TOTAL)




本文转自 rfyiamcool 51CTO博客,原文链接:http://blog.51cto.com/rfyiamcool/1048485 ,如需转载请自行联系原作者

相关文章
|
1月前
|
开发者 Python
如何在Python中管理模块和包的依赖关系?
在实际开发中,通常会结合多种方法来管理模块和包的依赖关系,以确保项目的顺利进行和可维护性。同时,要及时更新和解决依赖冲突等问题,以保证代码的稳定性和可靠性
47 4
|
10天前
|
Python
Python Internet 模块
Python Internet 模块。
105 74
|
28天前
|
算法 数据安全/隐私保护 开发者
马特赛特旋转算法:Python的随机模块背后的力量
马特赛特旋转算法是Python `random`模块的核心,由松本真和西村拓士于1997年提出。它基于线性反馈移位寄存器,具有超长周期和高维均匀性,适用于模拟、密码学等领域。Python中通过设置种子值初始化状态数组,经状态更新和输出提取生成随机数,代码简单高效。
105 63
|
1月前
|
测试技术 Python
手动解决Python模块和包依赖冲突的具体步骤是什么?
需要注意的是,手动解决依赖冲突可能需要一定的时间和经验,并且需要谨慎操作,避免引入新的问题。在实际操作中,还可以结合使用其他方法,如虚拟环境等,来更好地管理和解决依赖冲突😉。
|
1月前
|
持续交付 Python
如何在Python中自动解决模块和包的依赖冲突?
完全自动解决所有依赖冲突可能并不总是可行,特别是在复杂的项目中。有时候仍然需要人工干预和判断。自动解决的方法主要是提供辅助和便捷,但不能完全替代人工的分析和决策😉。
|
1月前
|
JSON Linux 数据格式
Python模块:从入门到精通,只需一篇文章!
Python中的模块是将相关代码组织在一起的单元,便于重用和维护。模块可以是Python文件或C/C++扩展,Python标准库中包含大量模块,如os、sys、time等,用于执行各种任务。定义模块只需创建.py文件并编写代码,导入模块使用import语句。此外,Python还支持自定义模块和包,以及虚拟环境来管理项目依赖。
Python模块:从入门到精通,只需一篇文章!
|
1月前
|
Python
Python的模块和包
总之,模块和包是 Python 编程中非常重要的概念,掌握它们可以帮助我们更好地组织和管理代码,提高开发效率和代码质量
40 5
|
1月前
|
数据可视化 Python
如何在Python中解决模块和包的依赖冲突?
解决模块和包的依赖冲突需要综合运用多种方法,并且需要团队成员的共同努力和协作。通过合理的管理和解决冲突,可以提高项目的稳定性和可扩展性
|
1月前
|
JavaScript 前端开发 Python
python中的OS模块的基本使用
欢迎来到瑞雨溪的博客,一名热爱JavaScript与Vue的大一学生。博客分享前端技术及全栈开发经验,持续更新中,期待您的关注和支持!🎉🎉🎉
37 0
|
1月前
|
JavaScript 前端开发 Python
python中的platform模块的基本使用
欢迎来到瑞雨溪的博客,一名热爱JavaScript与Vue的大一学生。博客分享前端技术,助你成长。关注我,持续更新中!🎉🎉🎉
25 0