【问题标题】:Using Schedule to run jobs at certain times使用 Schedule 在特定时间运行作业
【发布时间】:2015-11-11 20:51:32
【问题描述】:

我正在尝试安排一些工作,感谢 stackoverflow,我能够找到 Schedule (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() 没有文档,所以我不知道如何修复它以使其正常工作。请帮忙。

谢谢。

【问题讨论】:

    标签: python schedule


    【解决方案1】:

    这就是我想出的。显然这是错误的(它卡在 while 循环)。 .run_pending() 没有文档,所以我 不知道如何修复它以使其正常工作。请帮忙。

    这似乎是正确的行为。调度程序每 60 秒检查一次挂起的作业,并且(我假设)在它们进入时运行它们。它应该永远运行,因为您是否使用schedule.every().day.do(job) 永久调度作业。你的问题是你需要在后台运行这个程序。

    如果您对适合生产环境的东西感兴趣,我建议您查看Celery(我很可能是矫枉过正)或Python RQ。这些都有很好的文档记录、分发,并且可以开箱即用地在后台运行。

    【讨论】:

    • 我在 if 分支中放了一条打印语句。一旦 while 循环开始,它就永远不会运行。
    • @ZtoYi compareTimes 对 i.time 做了什么? i.time 是什么?检查那些。
    • compareTimes 有效。我已经彻底检查过了。如果我在它应该运行的时候运行这个程序,就会进入 if 循环。
    • @ZtoYi “应该运行的时间”是什么意思?调度队列的目的是为您处理“它应该运行的时间”。
    • @ZtoYi 我在 if 分支中放了一条打印语句,是的,这只会执行一次 - 在调度作业时。那么只有 job 函数将运行,根据您的示例每天运行一次。将打印语句放入job,您将看到它以预定的时间间隔运行。
    【解决方案2】:

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

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

    有关示例,请参阅here

    【讨论】:

    • 作业串行执行是什么意思?假设我有一个计划在 3:00 运行的工作,另一个计划在 2:00 运行(分别)。 2:00 作业总是在 3:00 作业之前运行,即使它是在之后订购的,对吧?
    • 是的,你是对的。串行意味着下一个作业将在前一个作业完成后执行。所以下午 2 点的工作首先开始。下午 3 点的作业只有在下午 2 点的作业完成后才开始!如果下午 2 点未完成,下午 3 点的工作将被推迟。
    【解决方案3】:

    在这一行:

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

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

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

    现在添加

    .at('xx:xx')
    

    脚本可以正常工作

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-29
      • 2018-09-26
      • 1970-01-01
      • 2016-06-05
      • 2017-02-04
      • 1970-01-01
      相关资源
      最近更新 更多