作者touge (峠)
看板Python
标题[问题] 在目标高负载下的请求失败问题
时间Mon May 10 11:12:00 2021
最近在写一个类似抢票的程式..
但在实际使用的时候遇到一个问题
我有设置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://webptt.com/cn.aspx?n=bbs/Python/M.1620616322.A.207.html
1F:→ touge: 刚刚又试了一下,即使网路没有问题,maxretries似乎有时候 05/10 16:33
2F:→ touge: 会按照设定max执行 有时候直接跳出 不知为何.. 05/10 16:34
3F:推 poototo: 看哪些回应的status code会触发Retry 05/10 19:11
4F:→ touge: 自问自答一下..在对方伺服器忙碌完全无回应的状况下..设定 05/11 00:53
5F:→ touge: timeout不会有作用(即使timeout=Xs ,会直接结束请求) 05/11 00:54
6F:→ touge: 保险作法还是要比对status code 作try重新跑请求 05/11 00:55
7F:→ TakiDog: 其实wrk(lua) or 用golang写更好,python当测试 05/12 10:13
8F:→ slv922: 要用 threading 并设置 timeout,除了可以解决你原本的 05/14 03:11
9F:→ slv922: 问题还可以加快抢票的速度XD 05/14 03:12
10F:→ slv922: 楼上大大建议更棒, 用 golang 一下就解掉你的需求了 05/14 03:13