在Python3中调度事件
我有4个python脚本,大部分是从命令行运行的。我一直在尝试安排他们,但到目前为止,我还没有找到一个好方法来做到这一点。我对这一切应该如何运作有一些要求 我的脚本及其作用: 脚本编号1;扫描数据库中的大量记录并进行一些处理 脚本编号2;执行更多处理,应仅在脚本编号1完成后运行 脚本编号3和4;这些脚本与1或2无关,但应每小时运行一次在Python3中调度事件,python,python-3.x,scheduled-tasks,Python,Python 3.x,Scheduled Tasks,我有4个python脚本,大部分是从命令行运行的。我一直在尝试安排他们,但到目前为止,我还没有找到一个好方法来做到这一点。我对这一切应该如何运作有一些要求 我的脚本及其作用: 脚本编号1;扫描数据库中的大量记录并进行一些处理 脚本编号2;执行更多处理,应仅在脚本编号1完成后运行 脚本编号3和4;这些脚本与1或2无关,但应每小时运行一次 有什么建议用Python调度这些脚本的最佳方法吗?我知道需要调度所需的作业。 对于调度作业,最好使用像Jenkins这样的CI工具 为脚本1和脚本2创建作业,并在
有什么建议用Python调度这些脚本的最佳方法吗?我知道需要调度所需的作业。 对于调度作业,最好使用像Jenkins这样的CI工具
有一个很好的框架来调度python(不仅仅是python!)脚本! 看一看: 它在github已经有了13k的stars,在许多公司的prod中使用,并且有很多教程。它由spotify开发和支持,因此正在积极更新。当然,还有开源:) 用户可以通过PyPi轻松安装,下一步:
pip install luigi
如果您愿意,它甚至有web GUI。
我真的推荐它 如果您想继续使用Python,有一个apscheduler。 与其单独运行脚本,不如导入脚本并运行其函数 例如:
import time
from apscheduler.schedulers.background import BackgroundScheduler
scheduler = BackgroundScheduler()
# your script 1 main function (should be imported instead of creating here)
def my_script1():
pass
# your script 2 main function (should be imported instead of creating here)
def my_script2():
pass
# This exists so
def my_script_runner():
my_script1()
my_script2()
# your script 3 main function (should be imported instead of creating here)
def my_script3(id=None):
print(id)
job_kwargs = {
'id': 1
}
# Hourly job
scheduler.add_job(my_script_runner, 'interval', [], None, name='myscripts1and2', seconds=7200)
scheduler.add_job(fn, 'interval', [], job_kwargs, name='myscript3', seconds=3600)
scheduler.start()
# Main executer loop
try:
while True:
time.sleep(2)
except (KeyboardInterrupt, SystemExit):
scheduler.shutdown()
您正在使用的操作系统是什么?在python中调度脚本是一项困难的要求吗?通常,人们会使用诸如cron或systemd之类的工具来安排每小时的运行时间(假设是linux)。下面是您可以参考的链接-如果您使用的是类似linux的操作系统,不要过于复杂,只需使用
cron
(),并创建独立的计划即可。第一个计划将运行:python/path/to/script1.py&&python/path/to/scrip2.py
。第二个计划应每小时运行一次(cron expression0****
),并应运行python/path/to/scrip3.py
。最后,第三个计划也应该每小时计划一次(cron expression0****
),并且应该运行python/path/to/scrip4.py