在特定时间使用 Schedule to 运行 个作业

Using Schedule to run jobs at certain times

我正在尝试安排一些工作,多亏了 Whosebug,我才能够找到时间表 (https://pypi.python.org/pypi/schedule)。

不幸的是,这没有很好的记录。我有一份我正在尝试 运行 的工作列表,每个工作在一天中的特定时间应该是 运行。

for i in jobArray:
    # compareTimes returns a boolean that indicates if it's time to run it, assume it works.
    if compareTimes(i.time):
        # I want to schedule this job for a specific time, i.time
        schedule.every().day.do(job)
while 1:
    schedule.run_pending()
    time.sleep(60)

这是我想到的。显然这是错误的(它陷入了 while 循环)。 .run_pending() 没有文档,所以我不知道如何修复它以使其正常工作。请协助。

谢谢。

This is what I came up with. Obviously this is wrong (it gets stuck in the while loop). There is no documentation for .run_pending() so I don't know how to fix it to get it to work. Please assist.

这似乎是正确的行为。调度程序每 60 秒检查一次挂起的作业,并且(我假设)在它们进入时 运行 处理它们。它应该永远 运行,因为你是用 [=10 永久地调度作业=].你的问题是你需要在后台运行这个程序。

如果您对适合生产环境的东西感兴趣,我建议您看一看 Celery (which my very well be overkill) or Python RQ。这些都有详细的文档记录和分发,并且可以 运行 在后台开箱即用。

我认为你的解决方案应该有效:主线程被循环阻塞。您在schedule.every().day.do(job)注册的工作每天都会被调用。提醒作业是串行执行的! 我认为按照您注册的顺序。

有关不阻塞主线程的解决方案,请参阅此 Code(run_continuously 方法)。

有关示例,请参阅 here

在这一行中:

schedule.every().day.do(job)

您没有指定当天需要 运行 脚本的时间,正确的语法是:

schedule.every().day.at("00.00").do(job)

现在通过添加

.at('xx:xx')

脚本可以正常运行

注意 : 如果你指定的时间例如是: '4:13' 那么它会 return 一个错误,正确的格式是 '04:13'表示必须是'xx:xx'

我尝试了代码并且它工作正常所以希望这能解决你的问题。