如何每隔 x 秒重复执行一个函数?

新手上路,请多包涵

我想永远每 60 秒在 Python 中重复执行一个函数(就像 Objective C 中的 NSTimer 或 JS 中的 setTimeout 一样)。此代码将作为守护进程运行,实际上就像使用 cron 每分钟调用 python 脚本一样,但不需要用户进行设置。

这个关于用 Python 实现的 cron 的问题中,该解决方案似乎实际上只是 sleep() x 秒。我不需要这样的高级功能,所以也许这样的事情会起作用

while True:
    # Code executed here
    time.sleep(60)

此代码是否存在任何可预见的问题?

原文由 davidmytton 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 379
2 个回答

如果您的程序还没有事件循环,请使用 sched 模块,它实现了通用事件调度程序。

 import sched, time
s = sched.scheduler(time.time, time.sleep)
def do_something(sc):
    print("Doing stuff...")
    # do your stuff
    sc.enter(60, 1, do_something, (sc,))

s.enter(60, 1, do_something, (s,))
s.run()

If you’re already using an event loop library like asyncio , trio , tkinter , PyQt5 , gobject , kivy 以及许多其他 - 只需使用现有事件循环库的方法来安排任务即可。

原文由 nosklo 发布,翻译遵循 CC BY-SA 4.0 许可协议

像这样将你的时间循环锁定到系统时钟:

 import time
starttime = time.time()
while True:
    print("tick")
    time.sleep(60.0 - ((time.time() - starttime) % 60.0))

原文由 Dave Rove 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题