我有一个 Python 脚本,它遍历一些对象并从 xml 格式的 url 获取数据并将其存储在 MySQL 数据库中。我在下面附上了一个(简化的)脚本版本。我使用 Windows 任务计划程序安排脚本每天运行一次。脚本和调度在大多数情况下都可以正常工作,但每月一次或两次,脚本在中途某个地方意外终止,没有任何记录的异常。当我检测到脚本已终止并手动重新运行脚本时,它会在没有任何问题且没有任何更改的情况下完成。当脚本提前终止时,Windows 调度程序从不报告任何问题,即“历史记录”选项卡只报告操作完成/任务完成,就像一切都按计划进行时一样。
脚本的简化版本:
for Obj in objects:
t=0
dbdata = ''
logger.info('Object: {s}\tID: {i}'.format(s=Obj.name, i=Obj.id))
try:
url = 'http://www.xyz.com/webproxy/DataProxy.aspx?Object=' + Obj.id
logger.debug(url)
data = urlopen(url)
dom = minidom.parse(data)
for node in reversed(dom.getElementsByTagName('t')):
dbdata = dbdata + str(node.getAttribute('t')) + '\t' + str(float(node.getAttribute('p'))) + '\t' + str(int(node.getAttribute('v'))) + '\t' + str(node.getAttribute('id')) + '\t' + str(node.getAttribute('b')) + '\t' + str(node.getAttribute('s')) + '\n'
t=t+1
if len(dbdata)>0:
cursor.execute(sql,(Obj.id,Obj.name,daydb,dbdata))
logger.info('# rows: {n}'.format(n=t)
except HTTPError, e:
logger.error(e.msg)
logger.error('HTTPError. Error code: ' + str(e.code))
except ExpatError, ex:
logger.error(ex.msg)
logger.error('Expat Error. Error code: ' + str(ex.code))
except Exception, e:
logger.error(e.msg)
logger.error('Exception. Error code: ' + str(e.code))
有没有人知道为什么脚本每隔一段时间就会过早终止,或者我可以在脚本或日程安排中做些什么来避免这个问题,或者至少让正在发生的事情更加清晰?谢谢