- 背景:
今天测试接口并发的时候遇到一个多线程的问题,记录一下;
- 经过:
之前接口并发都是用burpsuite共计模块测试,今天测试这个接口拼接到burpsuite后死活不行;就用ptython模拟了下。
多线程一般用的少,直接撸了一段如下:
模块引用、请求头、paload略过
def func_request():
response = requests.request("POST", url, headers=headers, data = payload, files = files)
print(response.content.decode('unicode_escape'))
threads = []
for i in range(0,50):
t = threading.Thread(target=func_request,args=())
threads.append(t)
if __name__ == '__main__':
for t in threads:
t.setDaemon(True)
t.start()
print(('%s 执行时间为 %s') % (t, get_time_ms()))
t.join()
print("全部结束时间: %s" % get_time_ms())
exit()
- 问题:
当并发数20时,打印的请求返回数据丢失不全;数据库数据log是20条,怀疑是不是中间件都出了问题。
- 解决:
子线程结束后,父线程再结束
def func_request():
response = requests.request("POST", url, headers=headers, data = payload, files = files)
# print(response.text)
print('response' + str(response))
print(response.content.decode('unicode_escape'))
# print(response.headers.)
# print(response.text.encode('utf8'))
threads = []
for i in range(0,50):
t = threading.Thread(target=func_request,args=())
threads.append(t)
if __name__ == '__main__':
for t in threads:
t.setDaemon(True)
t.start()
print(('%s 执行时间为 %s') % (t, get_time_ms()))
# 子进程结束完,父进程才结束
for t in threads:
t.join()
print("全部结束时间: %s" % get_time_ms())
exit()