如何仅在一天中的特定时间运行 Python 脚本?

Posted

技术标签:

【中文标题】如何仅在一天中的特定时间运行 Python 脚本?【英文标题】:How to run Python script only during certain hours of the day? 【发布时间】:2015-11-08 20:16:37 【问题描述】:

我有一个脚本需要在早上 7 点到晚上 9 点之间运行。该脚本已经无限期运行,但如果我能够在上述时间之外暂停它,那么它将最大限度地减少它产生的数据量。

我目前在某些部分使用time.sleep(x),但time.sleep(36000) 似乎有点傻?

使用 Python 2.7

提前致谢!

【问题讨论】:

为什么不使用像 cron 这样的调度器呢?尽管您仍然需要让它在晚上 9 点自行停止。除非你也将停止它的命令放入调度程序中。 time.sleep() 不保证它会等待指定的全部时间。它可以早点或晚点返回,所以你至少应该使用一个while循环来等待剩余时间到下一个唤醒时间。 Python 的 crontab pypi.python.org/pypi/python-crontab 可能就是你要找的。​​span> 【参考方案1】:

您应该使用 cron 作业(如果您正在运行 Linux)。

例如:每天早上 7 点到 9 点之间执行您的 python 脚本。

0 7 * * * /bin/execute/this/script.py
分钟:0 小时:7 月份中的某天:*(每月的每一天) 每月:*(每月) 和星期:*(全部)

现在说你想在上午 9 点退出程序。

您可以像这样实现您的 python 代码,使其在 2 小时后自动终止。

import time

start = time.time()

PERIOD_OF_TIME = 7200 # 120 min

while True :
    ... do something

    if time.time() > start + PERIOD_OF_TIME : break

【讨论】:

在 Windows 上运行,但第二部分有帮助。 @eug1712 尝试寻找 Windows 的 cron 替代品。例如:Windows 的“AT”命令与 cron 非常相似。它可以通过命令行获得。 :***.com/questions/132971/…【参考方案2】:

您应该考虑使用像 cron 这样的调度程序。但是,如果脚本要无限期运行,我认为time.sleep(36000) 是可以接受的(或time.sleep(10*60*60))。

【讨论】:

它会无限期运行,但time.sleep(10*60*60)的可靠性如何?【参考方案3】:

您可以使用时间函数来检查现在是什么时间,然后在需要时调用您的脚本:

import time
import subprocess

process = None
running = False

while True:
    if time.daylight and not running:
        # Run once during daylight
        print 'Running script'
        process = subprocess.Popen("Myscript.py")
        running = True
    elif not time.daylight and running:
        # Wait until next day before executing again
        print 'Terminating script'        
        process.kill()
        running = False
    time.sleep(600)  # Wait 10 mins

【讨论】:

这并没有解决问题。如果你要做这种事情,你应该使用调度器。

以上是关于如何仅在一天中的特定时间运行 Python 脚本?的主要内容,如果未能解决你的问题,请参考以下文章

当且仅当有新的提交时,如何在一天中的特定时间构建 XCode 机器人?

Firebase函数在一天中的特定时间重置值[重复]

Crontab 在一天中的两个小时运行,但其中一个小时不包括一周中的某些天

在一天中的特定时间安排本地通知

如何更改 seaborn 直方图以在一天中的几个小时内工作?

如何在一天中的不同时间设置机器人的状态?