我目前正在使用python在数据库中的表上循环执行繁重的处理任务。为了对其他用户友好,我希望这种处理只发生在夜间。当早起者开始使用数据库时,我希望能够对此脚本的提前终止进行编程。
我知道interrupting cow所以我可以这样:
from interruptingcow import timeout
from dbsettings import dbsetting
con = connect(database=dbset['database'],
host=dbset['host'],
user=dbset['user'],
password=dbset['password'])
cursor = con.cursor()
YEARS = {"2014":range(1, 13),
"2015":range(1, 13)}
def update_table(yyyymm, con, cursor)
table = 'public.tablename'+yyyymm
cursor.execute('Do something on {table}'.format(table))
con.commit()
try:
with timeout(57600, exception=RuntimeError):
for year in YEARS:
for month in years[year]:
yyyymm = get_yyyymm(year, month)
update_table(yyyymm, con, cursor)
except RuntimeError:
print "It's morning, killing database processing"
但这是最佳做法吗?还有更好的方法吗?