我写了一个简单的服务器,它运行良好。 所以我想编写一些代码,这些代码会同时向我的服务器发出许多帖子请求以模拟压力测试。我用python。
假设我的服务器的网址是http://myserver.com
。
file1.jpg
和file2.jpg
是需要上传到服务器的文件。
这是我的测试代码。我使用threading
和urllib2
。
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
错误。
我不知道为什么我的代码出错了,或者有更好的方法可以做到这一点?
一个引用,我的服务器使用flask
和gunicorn
以python编写。
提前致谢。