在每天 Python 的指定时间后执行常规任务
Doing a regular task after a specified time of day in Python everyday
我需要 运行 一些代码来存储我每天 23:30 之后收集的值列表。为此,我使用了该代码:
def sayac_yaz():
threading.Timer(3600, sayac_yaz).start()
save_time = datetime.datetime.now()
if (save_time.hour<23):
return
print "Sayaclari kaydediyor"
if mem.sayac_okuma_flag==0:
save_dict=mem.readings_from_counters
# Connecting to the database file
conn2 = sqlite3.connect('tenantdata.sqlite')
c2 = conn2.cursor()
for idx in save_dict:
sayac_value=save_dict[idx]
actual_counter_id=idx
if isinstance(sayac_value, float):
# insert a new row with the current date and time, e.g., 2014-03-06
c2.execute('''INSERT INTO tenant_counter VALUES(?,?,?,?,?)''' , (actual_counter_id, save_time.strftime('%Y-%m-%d'), save_time.strftime('%H:%M:%S'), save_time.strftime('%Y-%m-%d %H:%M:%S'), sayac_value))
else:
# insert a new row with the current date and time, e.g., 2014-03-06
c2.execute('''INSERT INTO tenant_counter VALUES(?,?,?,?,?)''' , (actual_counter_id, save_time.strftime('%Y-%m-%d'), save_time.strftime('%H:%M:%S'), save_time.strftime('%Y-%m-%d %H:%M:%S'), 'Error!'))
conn2.commit()
conn2.close()
return
据我所知,这里我只能在线程启动后每小时 运行 编写该代码。我如何更改 ıt 以便它每天在 23:30 之后工作一次?对我来说,尤其是这段时间部分很重要。
我的建议是使用系统调度程序(Linux 上的 crontab),因为它就是为此目的而设计的。
如果你无法使用 crontab,你必须保留你的脚本 运行,并定期检查当前时间:
while True:
now = datetime.datetime.now()
# call the function between 23:30 and 23:35
if now.hour == 23 and 30 <= now.minute <35:
sayac_yaz()
time.sleep(5*60)
我需要 运行 一些代码来存储我每天 23:30 之后收集的值列表。为此,我使用了该代码:
def sayac_yaz():
threading.Timer(3600, sayac_yaz).start()
save_time = datetime.datetime.now()
if (save_time.hour<23):
return
print "Sayaclari kaydediyor"
if mem.sayac_okuma_flag==0:
save_dict=mem.readings_from_counters
# Connecting to the database file
conn2 = sqlite3.connect('tenantdata.sqlite')
c2 = conn2.cursor()
for idx in save_dict:
sayac_value=save_dict[idx]
actual_counter_id=idx
if isinstance(sayac_value, float):
# insert a new row with the current date and time, e.g., 2014-03-06
c2.execute('''INSERT INTO tenant_counter VALUES(?,?,?,?,?)''' , (actual_counter_id, save_time.strftime('%Y-%m-%d'), save_time.strftime('%H:%M:%S'), save_time.strftime('%Y-%m-%d %H:%M:%S'), sayac_value))
else:
# insert a new row with the current date and time, e.g., 2014-03-06
c2.execute('''INSERT INTO tenant_counter VALUES(?,?,?,?,?)''' , (actual_counter_id, save_time.strftime('%Y-%m-%d'), save_time.strftime('%H:%M:%S'), save_time.strftime('%Y-%m-%d %H:%M:%S'), 'Error!'))
conn2.commit()
conn2.close()
return
据我所知,这里我只能在线程启动后每小时 运行 编写该代码。我如何更改 ıt 以便它每天在 23:30 之后工作一次?对我来说,尤其是这段时间部分很重要。
我的建议是使用系统调度程序(Linux 上的 crontab),因为它就是为此目的而设计的。
如果你无法使用 crontab,你必须保留你的脚本 运行,并定期检查当前时间:
while True:
now = datetime.datetime.now()
# call the function between 23:30 and 23:35
if now.hour == 23 and 30 <= now.minute <35:
sayac_yaz()
time.sleep(5*60)