pip install flask_apscheduler
from apscheduler.schedulers.background import BackgroundScheduler
from apscheduler.jobstores.sqlalchemy import SQLAlchemyJobStore
# 任务配置类
class SchedulerConfig(object):
# 配置执行job
JOBS = [
{
'id': 'put_into_queue',
'func': 'app.schedules.task:task1',
'args': (1,2),
'trigger': 'interval',
'seconds': 60 * 3 # 本任务为每3分钟执行一次
},
{
'id': 'scheduler_dev_queueing',
'func': 'app.schedules.task:task2',
'kwargs': {'a': 1, "b": 2},
'trigger':{ # 本任务为每周一五点五十九分四十秒执行一次
'type': 'cron', # 类型
'day_of_week': "0", # 可定义具体哪几天要执行
'hour': '5', # 小时数
'minute': '59',
'second': '40' # "*/3" 表示每3秒执行一次,单独一个"3" 表示每分钟的3秒。现在就是每一分钟的第3秒时循环执行。
}
}
]
# 存储位置
SCHEDULER_JOBSTORES = {
'default': SQLAlchemyJobStore(url='sqlite:///jobs.sqlite')
}
# 线程池配置
SCHEDULER_EXECUTORS = {
'default': {'type': 'threadpool', 'max_workers': 20}
}
# 配置时区
SCHEDULER_TIMEZONE = 'Asia/Shanghai'
SCHEDULER_JOB_DEFAULTS = {
'coalesce': False,
'max_instances': 3
}
# 调度器开关
SCHEDULER_API_ENABLED = True
'app.schedules.task:task1'
: 执行任务的function名称,app.schedules.task
就是app
下面的schedules
的task.py
文件,task1
是方法名称。文件模块和方法之间用冒号":",而不是用英文的"."if __name__ == '__main__':
# 定时任务
app.config.from_object(SchedulerConfig())
# 同时指定时区,防止上下时区不一致
scheduler = APScheduler(BackgroundScheduler(timezone="Asia/Shanghai"))
# 注册app
scheduler.init_app(app)
scheduler.start()
app.run(host="0.0.0.0", port=5001, use_reloader=False)
最基本的一种调度,作业只会执行一次。它的参数如下:
基于Nginx+Supervisord+uWSGI+Django1.11.1+Python3.6.5构建