分享

python多线程实现http请求

 java_laq小馆 2014-01-10
#!/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

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多