在特定时间触发 python 脚本
Fire a python script at a specific time
我正在尝试在 python 中构建一种工作系统。这包含一个前端网页,允许人们在 x 时间安排工作 运行。 PHP 然后将包含它的 运行 时间的作业写入数据库。然后我在我的服务器上有一个 python cronjob 运行ning,它将每 30 分钟检查一次以查看是否有新工作。如果有,它将触发一个计划脚本以在触发前倒计时到 event/job 的确切分钟。
可在以下位置找到我用于调度程序的脚本:https://github.com/dbader/schedule。这似乎是一个非常好的脚本,我在另一个 SO 页面上找到了它。但是 - 通过 PIP 安装后,该模块似乎无法正常工作?
正在尝试 运行 调度脚本 - Python 引擎崩溃于:
schedule.today.at('14:38').do(工作)
我只需要 运行 一个可以重复使用的一次性调度程序来同时安排多个作业。这些工作下周同一时间重复的可能性很小,因此我喜欢计划模块。
这是我根据 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)
如果其他人遇到同样的问题 - 或者对如何实现此问题有其他想法 - 请告诉我!!
查看 master 分支上的源代码,schedule
没有公开一个名为 today
的属性。如果您看到一个使用此类属性的示例,那么问题似乎是您使用的是已从中删除该属性的库版本。
不幸的是,如果您的主要要求是能够安排一次性任务,那么这个库看起来不太适合。
编辑:
没有 today
属性,因此 FAQ 中提到的片段不会直接起作用,但您应该能够挽救它的基本思想:
def job_that_executes_once():
# Do some work ...
return schedule.CancelJob
schedule.every().day().at('14:38').do(job_that_executes_once)
编辑 2:
可能有用:"only do this job once" 装饰器。
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)
我正在尝试在 python 中构建一种工作系统。这包含一个前端网页,允许人们在 x 时间安排工作 运行。 PHP 然后将包含它的 运行 时间的作业写入数据库。然后我在我的服务器上有一个 python cronjob 运行ning,它将每 30 分钟检查一次以查看是否有新工作。如果有,它将触发一个计划脚本以在触发前倒计时到 event/job 的确切分钟。
可在以下位置找到我用于调度程序的脚本:https://github.com/dbader/schedule。这似乎是一个非常好的脚本,我在另一个 SO 页面上找到了它。但是 - 通过 PIP 安装后,该模块似乎无法正常工作?
正在尝试 运行 调度脚本 - Python 引擎崩溃于: schedule.today.at('14:38').do(工作) 我只需要 运行 一个可以重复使用的一次性调度程序来同时安排多个作业。这些工作下周同一时间重复的可能性很小,因此我喜欢计划模块。
这是我根据 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)
如果其他人遇到同样的问题 - 或者对如何实现此问题有其他想法 - 请告诉我!!
查看 master 分支上的源代码,schedule
没有公开一个名为 today
的属性。如果您看到一个使用此类属性的示例,那么问题似乎是您使用的是已从中删除该属性的库版本。
不幸的是,如果您的主要要求是能够安排一次性任务,那么这个库看起来不太适合。
编辑:
没有 today
属性,因此 FAQ 中提到的片段不会直接起作用,但您应该能够挽救它的基本思想:
def job_that_executes_once():
# Do some work ...
return schedule.CancelJob
schedule.every().day().at('14:38').do(job_that_executes_once)
编辑 2:
可能有用:"only do this job once" 装饰器。
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)