我是编写python代码并尝试在特定时间内只执行一次代码的新手。轮询时间排序。
这里我想在00:30 AM时执行。
div_cd
使用无限循环和睡眠(100),100秒就足以执行一次打印。
答案 0 :(得分:1)
您的实现肯定有其他选择,但这完全取决于上下文。如果您不打算在 <start of script>
和 <desired execution time>
之间进行任何其他工作,您只需计算两点之间的秒数,整整一段时间都在睡觉。
from datetime import datetime as dt, time as t
from time import sleep
def work ():
pass
target = dt.combine (dt.now (), t (hour=10,minute=36,second=30))
secs = (target - dt.now ()).total_seconds ()
必须注意的是,使用dt.now ()
并明确按照上述方式设置时间可能会导致secs
中的负数(如果该时间已经过去)。
为了弥补上面提到的内容,我们需要确保我们的预定执行时间是将来的(如果我们必须等到明天,我们有效地向我们的target
添加一天):
import datetime as datetime_m
from datetime import datetime as dt, time as t
from time import sleep
...
target = dt.combine (dt.now (), t (hour=0,minute=30,second=0))
if (target < dt.now ()):
target += datetime_m.timedelta(days=1)
...
如果要在循环中运行它,只需在每次迭代时将target
增加一天,并且无需担心触发相同的工作两次。
import datetime as datetime_m
from datetime import datetime as dt, time as t
from time import sleep
def work ():
pass
target = dt.combine (dt.now (), t (hour=0,minute=30,second=0))
if (target < dt.now ()):
target += datetime_m.timedelta (days=1)
while True:
seconds_until_execution = (target - dt.now ()).total_seconds ()
sleep (seconds_until_execution) # wait
work () # execute
target += datetime_m.timedelta (days=1) # queue next