Python2多线程http post上传文件小程序

在Python27\Scripts的cmd下安装:easy_install poster-0.8.1-py2.7.egg

文件1:PostFile.py

#!/usr/bin/python
# -*- coding: UTF-8 -*-

from poster.encode import multipart_encode
from poster.streaminghttp import register_openers
import urllib2

def post_file(name, filename):
    try:
        # 在 urllib2 上注册 http 流处理句柄
        register_openers()
        # headers 包含必须的 Content-Type 和 Content-Length
        # datagen 是一个生成器对象,返回编码过后的参数
        fo = open(filename, "rb")
        datagen, headers = multipart_encode({name: fo})
        # 创建请求对象
        request = urllib2.Request("http://192.168.86.111:8008/tcs/", datagen, headers)
        #request = urllib2.Request("http://192.168.56.101:8008/tcs/", datagen, headers)
        # 实际执行请求并取得返回
        reply = urllib2.urlopen(request).read()
    except Exception, e:return ""
    else:
        return reply
    finally:
            fo.close()

#post_file("wav1", "test.wav")

文件2:TCSServerTest.py

#!/usr/bin/python
# -*- coding: UTF-8 -*-

import threading
import time
from PostFile import post_file

exitFlag = 0
totalErrorCnt = 0
totalCount = 0


class myThread(threading.Thread):  # 继承父类threading.Thread
    def __init__(self, threadID, threadName):
        threading.Thread.__init__(self)
        self.threadID = threadID
        self.threadName = threadName

    def run(self):  # 把要执行的代码写到run函数里面 线程在创建后会直接运行run函数
        print "Starting " + self.threadName + str(self.threadID)

        while not exitFlag:
            t_beging = time.clock()
            result = post_file(self.threadName, "test.wav")
            t_end = time.clock()
            dt = t_end - t_beging

            threadLock.acquire()
            global totalCount
            totalCount += 1
            dt_wall = time.time() - totalWallTime
            #print result
            if result == "":
                global totalErrorCnt
                totalErrorCnt += 1
            print "%s %s%d -> %d / %d = %f ... %d" % (time.ctime(time.time()), self.threadName, self.threadID, dt_wall, totalCount, dt_wall/totalCount, totalErrorCnt)
            threadLock.release()
            time.sleep(0.001)

        print "Exiting " + self.threadName + str(self.threadID)


threadLock = threading.Lock()
threads = []
global totalWallTime
totalWallTime = time.time()

for i in range(1, 6):
    # 创建新线程
    thread1 = myThread(2*i-1, "Thread")
    thread2 = myThread(2*i, "Thread")

    # 开启线程
    thread1.start()
    thread2.start()

    # 添加线程到线程列表
    threads.append(thread1)
    threads.append(thread2)

while True:
    a = raw_input()
    if a == 'q':
        exitFlag = True
        break

for t in threads:
    t.join()

print "Process Exiting"

涉猎不深,初编,后不断改进……

posted @ 2017-07-14 11:04  zhaojihui  阅读(665)  评论(0编辑  收藏  举报