【问题标题】:Running scheduled task in python在python中运行计划任务
【发布时间】:2021-10-22 00:44:49
【问题描述】:

我有一个 python 脚本,其中需要在每天早上 8 点完成某项工作。为此,我想有一个 while 循环来保持程序一直运行,并在 while 循环内使用 scheduler 类型包来指定特定子例程需要启动的时间。因此,如果有其他例程在一天中的不同时间运行,这将起作用。

def job(t):
    print "I'm working...", t
    return

schedule.every().day.at("08:00").do(job,'It is 08:00')

然后让windows scheduler运行这个程序就完成了。但是我想知道这是否非常低效,因为 while 循环浪费了 cpu 周期,而且随着程序将来变得更大,可能会冻结计算机。您能否告知是否有更有效的方法来安排需要执行的任务,同时不必运行while loop

【问题讨论】:

  • 最好有一个批处理文件来运行脚本以在您想要运行任务的正确时间执行由 Windows 任务调度程序调用的任务。而不是无限运行的while循环。如果它需要比这更精确,您可以提前一分钟左右启动它,然后让它等到您想要启动的确切毫秒数。
  • 你能解决你的问题吗?
  • 还没有,因为我在代码中遇到了一些时间问题。请再给我几天时间将此问题标记为已回答。谢谢

标签: python scheduled-tasks


【解决方案1】:

我注意到您执行脚本的时间要求很高。只需将您的 Windows 调度程序设置为在上午 8 点前几分钟启动脚本。脚本启动后,它将开始运行您的计划代码。完成任务后退出脚本。整个过程将在第二天重新开始。

这是使用Python模块schedule的正确方法

from time import sleep
import schedule


def schedule_actions():

  # Every Day task() is called at 08:00
  schedule.every().day.at('08:00').do(job, variable="It is 08:00")

  # Checks whether a scheduled task is pending to run or not
  while True:
    schedule.run_pending()

    # set the sleep time to fit your needs
    sleep(1)


def job(variable):
    print(f"I'm working...{variable}")
    return


schedule_actions()

以下是我对此主题的其他回答:

【讨论】:

    【解决方案2】:

    为什么要使用 while 循环?为什么不让您的 Windows 调度程序或 Linux cron 作业运行您的简单 python 脚本来执行任何操作,然后停止?

    随着时间的推移,维护往往会成为一个大问题,因此请尽量保持轻量级。

    【讨论】:

    • 我仍然需要我的代码只在特定时间运行到第二个。所以程序必须在 2 秒内开始和结束。所以这就是为什么我认为while循环
    • @Slartibartfast 您可以在 Linux cron 任务的启动脚本之前添加sleep 16。这将允许在08:00:16 开始任务。如果您在 8:00 到 8:30 之间等待某个事件,只需在 8:00 开始循环并在事件发生后中断它。如果您能够控制执行时间,则无需运行 24/7 循环。无论如何,调度架构是基础设施问题,而不是程序语言,并且取决于您要执行任务的位置。您的代码必须能够轻松部署在 WINdows、Linux 和其他不同的云无服务器平台上。所以调度必须由平台提供。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-11
    • 1970-01-01
    • 2010-09-22
    相关资源
    最近更新 更多