在特定时间使用 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'
我尝试了代码并且它工作正常所以希望这能解决你的问题。
我正在尝试安排一些工作,多亏了 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'
我尝试了代码并且它工作正常所以希望这能解决你的问题。