使用计划在特定时间运行作业

时间:2015-11-11 20:51:33

标签: python schedule

我正在尝试安排一些工作,感谢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()的文档,所以我不知道如何修复它以使其工作。请协助。

感谢。

3 个答案:

答案 0 :(得分:3)

  

这就是我想出的。显然这是错误的(它被卡住了   while循环)。没有.run_pending()的文档,所以我   不知道如何修复它以使其发挥作用。请协助。

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

如果您对适合生产环境的内容感兴趣,我建议您查看Celery(我很擅长)或Python RQ。这些都有很好的文档记录,分发,并且可以在开箱即用的背景下运行。

答案 1 :(得分:2)

我认为您的解决方案应该正常工作:主要线程被循环阻止。您每天都会调用您在schedule.every().day.do(job)注册的作品。提醒作业是连续执行的! 我认为按照你已经注册的顺序。

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

有关示例,请参阅here

答案 2 :(得分:0)

在这一行:

const clickSearchIcon = (query) => {
  const filteredItems = items.filter((item) => item.title === query);
  setItems(filteredItems);
};

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

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

现在添加

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

脚本可以正常工作

注意 :如果您指定的时间例如是:.at('xx:xx') 那么它会返回一个错误并且正确的格式是 '4:13' 意味着它必须是 {{1} }

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