[問題] 在目標高負載下的請求失敗問題

作者: touge (峠)   2021-05-10 11:12:00
最近在寫一個類似搶票的程式..
但在實際使用的時候遇到一個問題
我有設置max_retries次數
session.mount('http://', HTTPAdapter(max_retries=20))
session.mount('https://', HTTPAdapter(max_retries=20))
然後在post和get設置timeout=3
我進行一些網址測試的時候,以時間來看也確實retry了20次
(timeout=3 *retry20 =60秒)
不過在使用的時候(這時候目標伺服器很不穩定,因申請人數眾多),
timeout以後,似乎並沒有自己繼續retry,
而是直接停掉。
異常訊息如下...
requests.exceptions.ConnectTimeout:
HTTPConnectionPool(host='www.*******.com', port=80): Max retries exceeded
with url: /*****.php? (Caused by
ConnectTimeoutError(<urllib3.connection.HTTPConnection object at
0x000001FE9C64E5B0>, 'Connection to www.******.com timed out. (connect
timeout=3)'))
在目標低負載的時候很正常跑完
請問有人遇過類似情況嗎
謝謝
作者: touge (峠)   2021-05-10 16:33:00
剛剛又試了一下,即使網路沒有問題,maxretries似乎有時候會按照設定max執行 有時候直接跳出 不知為何..
作者: poototo (poototo)   2021-05-10 19:11:00
看哪些回應的status code會觸發Retry
作者: touge (峠)   2021-05-11 00:53:00
自問自答一下..在對方伺服器忙碌完全無回應的狀況下..設定timeout不會有作用(即使timeout=Xs ,會直接結束請求)保險作法還是要比對status code 作try重新跑請求
作者: TakiDog (多奇狗)   2021-05-12 10:13:00
其實wrk(lua) or 用golang寫更好,python當測試
作者: slv922 (詹姆士)   2021-05-14 03:11:00
要用 threading 並設置 timeout,除了可以解決你原本的問題還可以加快搶票的速度XD樓上大大建議更棒, 用 golang 一下就解掉你的需求了

Links booklink

Contact Us: admin [ a t ] ucptt.com