- 背景:
今天測試接口併發的時候遇到一個多線程的問題,記錄一下;
- 經過:
之前接口併發都是用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()