需要安装第三方库
pip install apscheduler
简单用法
from apscheduler.schedulers.background import BackgroundScheduler
def hello():
print('定时器触发器')
# 实例化
schedul = BackgroundScheduler()
# 添加到工作区
# schedul.add_job(hello, 'interval', seconds=3) # 三秒后执行
schedul.add_job(hello, 'date', run_date='2022-08-05 09:27:41') # 固定时间执行
if __name__ == '__main__':
schedul.start()
安装好之后去工厂调用他
from flask import Flask
from models.model import db
from flask_cors import CORS
from views.view import view_bp
# 导入定时任务模块
from apscheduler.schedulers.background import BackgroundScheduler
def create_app(config):
flask_app = Flask(__name__)
# 加载配置文件
flask_app.config.from_object(config)
# 初始化db
db.init_app(flask_app)
# 跨域
cors = CORS(flask_app)
# TODO 注册蓝图
flask_app.register_blueprint(view_bp)
# 添加工作区
schedul = BackgroundScheduler()
flask_app.schedul = schedul
# 启动工作区
flask_app.schedul.start()
return flask_app
去蓝图使用增、删、改、查
# 定时任务调度器
def my_job(name):
print(f'当前事务执行了:{name}')
class TaskView(Resource):
# 查看工作任务
def get(self):
jobs = current_app.schedul.get_jobs()
job_list = []
for job in jobs:
job_list.append({
'id': job.id,
'name': job.name,
'next_run_time': str(job.next_run_time),
'status': '进行中' if job.next_run_time else '已结束'
})
return jsonify({'code': 200, 'list': job_list})
# 添加定时任务
def post(self):
req = reqparse.RequestParser()
req.add_argument('name')
args = req.parse_args()
name = args['name']
current_app.schedul.add_job(my_job, 'interval', seconds=3, args=[name], name=f'任务:{name}')
return jsonify({'code': 200, 'msg': '定时任务添加成功'})
# 启动/暂停任务
def put(self):
req = reqparse.RequestParser()
req.add_argument('id')
args = req.parse_args()
id = args['id']
job = current_app.schedul.get_job(id)
print(dir(job))
if not job:
return jsonify({'code': 400, 'msg': "任务不存在"})
if job.next_run_time:
job.pause()
return jsonify({'code': 200, 'msg': '暂停任务'})
else:
job.resume()
return jsonify({'code': 200, 'msg': '继续任务'})
# 删除任务
def delete(self):
req = reqparse.RequestParser()
req.add_argument('id')
args = req.parse_args()
id = args['id']
job = current_app.schedul.get_job(id)
if not job:
return jsonify({'code': 400, 'msg': '任务不存在'})
job.remove()
return jsonify({'ccode': 200, 'msg': '删除成功'})
api.add_resource(TaskView, '/job')