在尝试使我的一个 Python 应用程序在连接中断时更加健壮时,我发现调用 urllib2 生成的 http 流的读取函数可能会永远阻止脚本。
我认为读取函数会超时并最终引发异常,但当连接在读取函数调用期间中断时,情况并非如此。
这是会导致问题的代码:
import urllib2
while True:
try:
stream = urllib2.urlopen('http://www.google.de/images/nav_logo4.png')
while stream.read(): pass
print "Done"
except:
print "Error"
(如果您尝试该脚本,您可能需要多次中断连接,然后才能达到脚本永远无法恢复的状态)
我通过 Winpdb 观看了该脚本,并制作了该脚本永远无法恢复的状态的屏幕截图(即使网络再次可用)。
Winpdb http://img10.imageshack.us/img10/6716/urllib2.jpg http://img10.imageshack.us/img10/6716/urllib2.jpg
有没有办法创建一个Python脚本,即使网络连接中断也能继续可靠地工作? (我宁愿避免在额外的线程中执行此操作。)
尝试类似的方法:
import socket
socket.setdefaulttimeout(5.0)
...
try:
...
except socket.timeout:
(it timed out, retry)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)