在 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 上安排任务的主要内容,如果未能解决你的问题,请参考以下文章