【发布时间】:2021-07-01 16:16:00
【问题描述】:
我想要一个计时器(目前使用 Python 3.8),它首先检查系统时间或海军天文台时钟,因此它可以随时启动并与 00 秒同步。
我只对系统时钟或海军天文台的秒数感兴趣。在每分钟的顶部,即秒 = 00 时,我需要将数据写入 DataFrame 或数据库,然后再休眠 60 秒。
我首先检查了系统时间,确定了从 00 秒开始的时间,并为该时间设置了第一个延迟。之后它应该延迟或休眠 60 秒,然后再次运行。数据在不断变化,但此时我只需要每 60 秒写入一次数据,希望它也能够使用其他时间范围,如 5 分钟、15 分钟等,但一旦第一个时间完成,其他时间框架会很容易。
这是我的蹩脚尝试,它运行了几次迭代然后退出,我确信它不是很有效
def time_delay():
sec = int(time.strftime('%S'))
if sec != 0:
wait_time = 60 - sec
time.sleep(wait_time)
sec = int(time.strftime('%S'))
wait_time = 60 - sec
elif time.sleep(60):
time_delay()
【问题讨论】:
-
你所拥有的是无限递归,最终会失败。你可以看看 Python 3 中的
sched模块。它可以为你处理细节。 -
你永远不会得到与时钟完全同步的东西,因为在检测到 00(或其他)秒和执行其他东西之间总会有延迟。
-
@TimRoberts:实际上OP的函数不会无限递归,因为
time.sleep()总是返回None,这将阻止它调用自己。
标签: python variables time timer delay