python 多線程 子進程結束完,父進程才結束

  • 背景:

今天測試接口併發的時候遇到一個多線程的問題,記錄一下;

  • 經過:

之前接口併發都是用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()

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章