在 python 上安排任务

Posted

技术标签:

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

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

【问题讨论】:

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

以上是关于在 python 上安排任务的主要内容,如果未能解决你的问题,请参考以下文章

安排任务每天在 eJabberd 服务器上运行?

如何在 Windows 任务调度程序上安排 azcopy?

如何安排不使用Windows任务计划程序运行bat文件?

任务安排一

[Luogu2365]任务安排(斜率优化)

每 15-30 分钟在 iOS 上安排一个任务