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


    在Python27Scripts的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"

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

  • 相关阅读:
    有7g和2g的砝码各一个,怎样称可以3次把140g东西分为50g和90g???????
    中缀到后缀(一个例子)
    动态代理模式的使用
    代理模式用来初始化的延迟下载
    ReentrantLock Condition 实现消费者生产者问题
    Two Sum
    [leetcode]重建二叉树(先序和终须) 中序遍和后续
    (转载)旋转数组查找 最简洁方法 总结
    [不明觉厉] 下一个排列
    codeforces -- 283A
  • 原文地址:https://www.cnblogs.com/zhaojihui/p/7169025.html
Copyright © 2020-2023  润新知