打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
python多线程实现http请求
#!/usr/bin python2.6
# -*- coding: utf-8 -*-


import threading, datetime, time, httplib

# 初始最大并发数
START_THEAD_COUNT = 200

# 递增并发数
THREAD_INCREASE_STEP = 10

# 域名
DOMAIN = 'www.baidu.com'

# 默认http请求
METHOD = 'get'

# 默认访问的web路径
PATH = '/'

# 请求发送间隔 整数
INTERVAL = 5  # 5秒

'''Factory'''
class biz :
    '''Main'''
    def run(self) :
        start = datetime.datetime.now()

        global FAILED_COUNT
        FAILED_COUNT = 0

        threads = []
        
        # thread instance initialization
        for i in range(START_THEAD_COUNT) :
            t=threading.Thread(target=self.execute, args=())
            threads.append(t)

        # activate threads
        for i in range(START_THEAD_COUNT) :
            threads[i].start()

        # wait for all ends
        for i in range(START_THEAD_COUNT) :
            threads[i].join()

        delta = datetime.datetime.now() - start
        writeline('INFO', 'Total is \'' + str(START_THEAD_COUNT) + '\' while failed \'' + str(FAILED_COUNT) + '\' in ' + str(delta.seconds) + str(delta.microseconds / 1000) + 'ms.')
        return (True, None)


    '''Execute http request and get response status'''
    def execute(self) :

        global FAILED_COUNT

        conn = httplib.HTTPConnection(DOMAIN)
        conn.request(METHOD, PATH)
        r = conn.getresponse()
        if r.status not in (200, 302) : FAILED_COUNT = FAILED_COUNT + 1
        conn.close()
        return (True, None)



'''Log writer'''
def writeline(status, msg) :
    line = time.strftime('%Y-%m-%d %X', time.localtime(time.time())) + ' [' + status + '] ' + msg
    print line
    return (True, line)


if __name__ == '__main__' :

    o = biz()

    while True :
        r, c = o.run()
        if not r : writeline('FAILED-', c)
        
        time.sleep(INTERVAL)
        
        # update max threads
        START_THEAD_COUNT = START_THEAD_COUNT + THREAD_INCREASE_STEP
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
使用JMeter进行压力测试
Semphores基本用法示例
快速多线程ping
采用libevent写管道事件通知与broadcast通知的效率对比
C#中使用Monitor类、Lock和Mutex类来同步多线程的执行
VS2005调试技巧集合
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服