37,743
社区成员
发帖
与我相关
我的任务
分享class APSchedulerJobConfig(object):
# 定时任务配置
JOBS = [
# 测试任务
# {
# 'id': 'shop_list',
# 'func': 'app.sched_tasks.add_tasks.task_calls:shop_list',
# 'args': ('shop_list',),
# 'trigger': 'cron',
# 'second': '*/10'
# },
# 生产任务,cron 循环定时任务,每天定时获取参与聚划算商品的数据
{
'id': 'juhuasuan_goods_items_list_cron',
'func': 'app.sched_tasks.add_tasks.task_calls:juhuasuan_goods_items_list',
'args': ('juhuasuan_goods_items_list_cron',),
'trigger': {
'type': 'cron',
'hour': '12', # 每天中午12点启动
# 'minute': '0',
# 'second': '0'
}
},
# 生产任务,interval 循环间隔任务,每隔一段时间,启动聚划算店铺监控任务,获取最新的参与聚划算的商品
{
'id': 'juhuasuan_shop_list_interval',
'func': 'app.sched_tasks.add_tasks.task_calls:juhuasuan_shop_list',
'args': ('juhuasuan_shop_list_interval', ),
'trigger': 'interval',
# 'seconds': 10 # 每隔10秒执行一次
'minutes': 10 # 每隔10分钟执行一次
},
# 生产任务:date 一次性任务,当flask系统启动时,该任务执行一次
# {
# 'id': 'juhuasuan_shop_list_date',
# 'func': 'app.sched_tasks.add_tasks.task_calls:juhuasuan_shop_list',
# 'args': ('juhuasuan_shop_list_date',),
# 'next_run_time': datetime.now() + timedelta(seconds=10)
# },
# 生产任务:date 一次性任务,当flask系统启动时,该任务执行一次
# {
# 'id': 'juhuasuan_goods_items_list_date',
# 'func': 'app.sched_tasks.add_tasks.task_calls:juhuasuan_goods_items_list',
# 'args': ('juhuasuan_goods_items_list_date',),
# 'next_run_time': datetime.now() + timedelta(seconds=10)
# }
]
config = 'mongodb://{}:{}@{}:{}/{}' # 连接数据库信息
config = config.format(
quote_plus(Config.FLASK_DB_MONGO_USER),
quote_plus(Config.FLASK_DB_MONGO_PASSWORD),
Config.FLASK_DB_MONGO_ADDRESS_OA, Config.FLASK_DB_MONGO_PORT, Config.FLASK_DB_MONGO_BI
)
client = MongoClient(config, read_preference=ReadPreference.NEAREST)
SCHEDULER_JOBSTORES = {
'default': MongoDBJobStore(collection='t_bi_sc_apscheduler_jobs', database=Config.FLASK_DB_MONGO_BI, client=client),
'mongo': MongoDBJobStore(collection='t_bi_sc_apscheduler_jobs', database=Config.FLASK_DB_MONGO_BI, client=client)
}
SCHEDULER_EXECUTORS = {
'default': {'type': 'threadpool', 'max_workers': 20}
}
SCHEDULER_JOB_DEFAULTS = {
'coalesce': True,
'max_instances': 3,
'misfire_grace_time': 3600
}
# APScheduler 定时任务开关
SCHEDLER_API_ENABLED = True
# 解决FLASK DEBUG模式定时任务执行两次
WERKZEUG_RUN_MAIN = True# 注册定时任务模块 APScheduler,使用锁机制,解决gunicorn创建多个实例
app.config.from_object(APSchedulerJobConfig)
f = open("scheduler.lock", "wb")
try:
fcntl.flock(f, fcntl.LOCK_EX | fcntl.LOCK_NB)
scheduler.init_app(app)
scheduler.start()
except:
pass
def unlock():
fcntl.flock(f, fcntl.LOCK_UN)
f.close()
atexit.register(unlock)from flask import Blueprint
from flask_apscheduler import APScheduler
sched = Blueprint('sched', __name__)
scheduler = APScheduler()# 启动定时任务,一次性任务,修改状态,把任务添加到任务列表中,系统五分钟执行一次任务列表,周期性任务
args = (params['task_id'], record['monitor_shop'])
job = {
'id': params['task_id'],
'func': 'app.sched_tasks.add_tasks.task_calls:juhuasuan_shop_data',
'args': args,
'seconds': 10,
}
next_time = datetime.now() + timedelta(seconds=job['seconds'])
scheduler.add_job(
func=job['func'], id=job['id'], args=job['args'],
next_run_time=next_time, jobstore='mongo', replace_existing=True
)
