我在循环中执行一些sqls。大多数代码工作正常并完成循环。但是有些时候python在2-3小时后因Traceback问题而失败。当我在DB中检查SQL执行时,它执行了但是python没有继续下一个执行循环并且卡住了。 2小时后抛出错误
执行SQL :
sql = f.read()
cursor.execute(sql)
错误:
Traceback (most recent call last):
...
...
File "/home/lib/python2.7/site-packages/pgdb.py", line 480, in __exit__
self.rollback()
File "/home/lib/python2.7/site-packages/pgdb.py", line 519, in rollback
raise _op_error("can't rollback")
pg.OperationalError: can't rollback
以下是循环中的完整代码:
dt = new_execution_timestamp_for(job, dependencies, cursor)
if dt is not None:
logging.info("Running job %s", job)
with open(os.path.join(os.environ['ROOT'],
"share", job + ".sql")) as f:
sql = f.read()
if weekly is None or weekly == date.today().weekday():
if loops is not None:
loop_items = fetch_list("loops", loops, cursor)
timestamp = fetch_job_timestamp(job, cursor)
for item in loop_items:
cursor.execute(sql, {loops: item,
'last_executed': timestamp})
else:
cursor.execute(sql)
cursor.execute(UPDATE_TIMESTAMP, (dt, job))
else:
logging.info("Skipping job %s", job)