新人踩坑之urlopen的timeout参数

  1. 问题背景 :Docker container的某个页面轮询功能在container在断网之后若干次以后无法获取最新数据。
  2. 问题分析:首先,为了复现该问题,写了一个让docker不断联网断网的shell脚本。

新人踩坑之urlopen的timeout参数_第1张图片

查看log后发现,在断网的时候thread依然会进行轮询,发现断网以后打印log,休眠5秒之后开始下一次轮询。可是在进行若干次的”断网-联网“操作后,再也没有任何有关log出现,Thread也没有退出,似乎突然”蒸发“了。最后一条log,urllin.request.urlopen报错。因此,问题定位在urlopen()这个方法上。

  1. 解决问题: 查阅Stackoverflow以及有关资料发现,urlopen()中的timeout参数未设置时可能会导致hangg问题。而我之前的代码中正好没有添加这个参数。设置timeout=60(单位:秒),在不断的”断网-联网“冲击下,hang 问题不再出现,解决。
  2. 感想: 没搞懂问题来源之前,总是改了一点代码然后就自以为是得开始“断网-联网”的测试。结果浪费了好几天时间也没有解决问题,一定要分析出root cause再来debug. 可以慢,但一定要稳。

你可能感兴趣的:(python)