我试图在python中构建一种作业系统。这构成了一个前端网页,允许人们安排在x时间运行的作业。然后,PHP将包含它的运行时间的作业写入数据库。我然后在我的服务器上运行一个python cronjob,它将每30分钟检查一次是否有新工作。如果有,它将触发一个计划脚本,以便在开始之前倒计时到事件/作业的确切分钟。
可以在https://github.com/dbader/schedule找到用于调度程序的脚本。它看起来像一个非常好的脚本,我在另一个SO页面上找到它。但是 - 通过PIP安装后,该模块似乎无法正常工作?
尝试运行计划脚本 - Python引擎崩溃: schedule.today.at(' 14:38&#39)做(作业)。 我只需要运行一次性调度程序,可以重复使用它同时安排多个作业。这些工作很可能在下周的同一时间重复,因此我喜欢计划模块。
这是我在GIT上找到的几个片段构建的示例代码:
import schedule
import time
def job():
# Do some work ...
print("Hello World")
return schedule.CancelJob
#schedule.every(10).seconds.do(job)
schedule.today.at('14:38').do(job)
while True:
schedule.run_pending()
time.sleep(1)
如果其他人遇到同样的问题 - 或者对如何实现这个问题有其他想法 - 请告诉我!!
答案 0 :(得分:1)
查看主分支上的源代码,schedule
不会公开名为today
的属性。如果您已经看到一个使用这样一个属性的示例,那么问题似乎就是您所在的库的版本已被删除。
不幸的是,如果您的主要要求是能够安排一次性任务,那么这个库看起来不太合适。
修改强>:
没有today
属性,因此常见问题解答中提到的代码段无法直接使用,但您应该能够挽救它的基本概念:
def job_that_executes_once():
# Do some work ...
return schedule.CancelJob
schedule.every().day().at('14:38').do(job_that_executes_once)
编辑2 :
可能有用:“只做一次这个工作”装饰。
from functools import wraps
import schedule
def do_once(func):
@wraps(func)
def wrapped(*args, **kwargs):
func(*args, **kwargs)
return schedule.CancelJob
return wrapped
@do_once
def some_one_off_job():
# Do some work
# No need to return schedule.CancelJob
print 5
@do_once
def some_other_one_off_job():
# hooray, decorators!
pass
schedule.every().day().at('14:38').do(some_one_off_job)
schedule.every().day().at('14:38').do(some_other_one_off_job)