同时使用文件发布请求

时间:2015-07-17 13:48:47

标签: python multithreading http post

我写了一个简单的服务器,它运行良好。 所以我想编写一些代码,这些代码会同时向我的服务器发出许多帖子请求以模拟压力测试。我用python。

假设我的服务器的网址是http://myserver.comfile1.jpgfile2.jpg是需要上传到服务器的文件。 这是我的测试代码。我使用threadingurllib2

async_posts.py

from Queue import Queue
from threading import Thread
from poster.encode import multipart_encode
from poster.streaminghttp import register_openers
import urllib2, sys

num_thread = 4
queue = Queue(2*num_thread)
def make_post(url):
    register_openers()
    data = {"file1": open("path/to/file1.jpg"), "file2": open("path/to/file2.jpg")}
    datagen, headers = multipart_encode(data)
    request = urllib2.Request(url, datagen, headers)
    start = time.time()
    res = urllib2.urlopen(request)
    end = time.time()
    return res.code, end - start # Return the status code and duration of this request.

def deamon():
    while True:
        url = queue.get()
        status, duration = make_post(url)
        print status, duration
        queue.task_done()

for _ in range(num_thread):
    thd = Thread(target = daemon)
    thd.daemon = True
    thd.start()

try:
    urls = ["http://myserver.com"] * num_thread
    for url in urls:
        queue.put(url)
    queue.join()
except KeyboardInterrupt:
    sys.exit(1)

num_thread很小(例如4)时,我的代码运行顺畅。但是,当我将num_thread切换为稍大一些的数字(例如10)时,所有线程都会崩溃并继续抛出httplib.BadStatusLine错误。

我不知道为什么我的代码出错了,或者有更好的方法可以做到这一点?

一个引用,我的服务器使用flaskgunicorn以python编写。

提前致谢。

0 个答案:

没有答案