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

看板Python作者 (峠)時間3年前 (2021/05/10 11:12), 編輯推噓1(109)
留言10則, 4人參與, 2年前最新討論串1/1
最近在寫一個類似搶票的程式.. 但在實際使用的時候遇到一個問題 我有設置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)')) 在目標低負載的時候很正常跑完 請問有人遇過類似情況嗎 謝謝 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 14.181.26.226 (越南) ※ 文章網址: https://www.ptt.cc/bbs/Python/M.1620616322.A.207.html

05/10 16:33, 3年前 , 1F
剛剛又試了一下,即使網路沒有問題,maxretries似乎有時候
05/10 16:33, 1F

05/10 16:34, 3年前 , 2F
會按照設定max執行 有時候直接跳出 不知為何..
05/10 16:34, 2F

05/10 19:11, 3年前 , 3F
看哪些回應的status code會觸發Retry
05/10 19:11, 3F

05/11 00:53, 3年前 , 4F
自問自答一下..在對方伺服器忙碌完全無回應的狀況下..設定
05/11 00:53, 4F

05/11 00:54, 3年前 , 5F
timeout不會有作用(即使timeout=Xs ,會直接結束請求)
05/11 00:54, 5F

05/11 00:55, 3年前 , 6F
保險作法還是要比對status code 作try重新跑請求
05/11 00:55, 6F

05/12 10:13, 2年前 , 7F
其實wrk(lua) or 用golang寫更好,python當測試
05/12 10:13, 7F

05/14 03:11, 2年前 , 8F
要用 threading 並設置 timeout,除了可以解決你原本的
05/14 03:11, 8F

05/14 03:12, 2年前 , 9F
問題還可以加快搶票的速度XD
05/14 03:12, 9F

05/14 03:13, 2年前 , 10F
樓上大大建議更棒, 用 golang 一下就解掉你的需求了
05/14 03:13, 10F
文章代碼(AID): #1WcAI287 (Python)
文章代碼(AID): #1WcAI287 (Python)