【问题标题】:Scheduling a task on python在 python 上安排任务
【发布时间】:2011-02-20 13:54:27
【问题描述】:

我想运行一个每 4 小时运行一次函数的程序。 这样做最省钱的方法是什么?

【问题讨论】:

  • 消耗最少?请澄清
  • 您使用的是什么操作系统?如果是unix,那么答案很可能是cron...
  • 什么平台?在 Unix/Linux 上,at/cron 机制是正确的方法。在 Windows 上,你必须创建一个服务,注册它的 UUID 并安排它在启动时启动,然后把你的长子送到雷德蒙德,或者像这样 sumptin...
  • 你为什么不在 Linux 上使用 cron 或在 Windows 上使用 at
  • 好吧,我打算在多个操作系统上为朋友提供这个软件,所以它必须是非操作系统特定的。我看到没有人强调 Bryan 的回答在 CPU 方面是根本错误的,所以我会用他的。

标签: python timer scheduled-tasks


【解决方案1】:

你可以使用sched模块

这里是文档

https://docs.python.org/3.4/library/sched.html

【讨论】:

    【解决方案2】:

    使用内置定时器线程:

    from threading import Timer
    
    def function_to_be_scheduled():
       """Your CODE HERE"""
    
    interval = 4 * 60 * 60   #interval (4hours)
    
    Timer(interval, function_to_be_scheduled).start() 
    

    【讨论】:

    • function_to_be_scheduled 不会只运行一次吗?并且不会 4小时重复一次。
    【解决方案3】:

    我能想到的最简单的方式(在 python 中,因为帖子是用 python 标记的):

    import time
    
    while True:
      do_task()
      time.sleep(4 * 60 * 60) # 4 hours * 60 minutes * 60 seconds
    

    【讨论】:

    • 好吧,效果很好,但是我对使用的 CPU 功率感到困扰,或者它几乎可以证明效率?
    • “效率证明?”那是什么意思?你认为它在睡眠时使用 CPU 吗?
    • 可以肯定地说它只是让进程进入睡眠状态。在唤醒之前几乎为零的 CPU 使用率。
    • time.sleep() 不准确。您应该通过循环重复使用 time.sleep() 来检查经过的时间是否符合预期时间。您可以使用 time.time() 获取当前时间,添加差异,然后在循环中使用 time.sleep() 来查看 time.time() >= 预期时间。这不是对调度的建议,而只是针对基于时间的简单延迟的简单解决方案。 4 小时,expected_time = time.time() + (4 * 60 * 60).
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-20
    • 1970-01-01
    • 1970-01-01
    • 2011-11-28
    • 2013-08-17
    • 2014-07-28
    相关资源
    最近更新 更多