diff --git a/applications/configs/config.py b/applications/configs/config.py index 18b9edd9561d9aa5b0ed7090290736b308a137f0..cafec6b08990440b609232b01d9fd084f22f957d 100644 --- a/applications/configs/config.py +++ b/applications/configs/config.py @@ -2,6 +2,9 @@ import logging import os from urllib.parse import quote_plus as urlquote +from apscheduler.executors.pool import ThreadPoolExecutor +from apscheduler.jobstores.sqlalchemy import SQLAlchemyJobStore + class BaseConfig: @@ -59,6 +62,19 @@ class BaseConfig: # 默认发件人的邮箱,这里填写和MAIL_USERNAME一致即可 MAIL_DEFAULT_SENDER = ('pear admin', os.getenv('MAIL_USERNAME') or '123@qq.com') + # 設置 APSCHEDULER 參數 + SCHEDULER_API_ENABLED = os.getenv('SCHEDULER_API_ENABLED') or False + SCHEDULER_JOBSTORES: dict = { + 'default': SQLAlchemyJobStore(url=f'mysql+pymysql://{MYSQL_USERNAME}:{MYSQL_PASSWORD}@{MYSQL_HOST}:{MYSQL_PORT}/{MYSQL_DATABASE}') + } + SCHEDULER_EXECUTORS: dict = { + 'default': ThreadPoolExecutor(20) + } + SCHEDULER_JOB_DEFAULTS: dict = { + 'coalesce': False, + 'max_instances': 3 + } + class TestingConfig(BaseConfig): """ 测试配置 """ diff --git a/applications/view/admin/task.py b/applications/view/admin/task.py index 5c825a628e653fe36296e868a2da5909012d9769..0f6a79ef844de1ef66da12b7f9280c8844248845 100644 --- a/applications/view/admin/task.py +++ b/applications/view/admin/task.py @@ -1,6 +1,6 @@ from flask import Blueprint, request, render_template from flask_apscheduler.utils import job_to_dict - +from datetime import datetime as dt from applications.common.tasks import tasks from applications.common.tasks.tasks import task_list from applications.common.utils.http import table_api, fail_api, success_api @@ -56,12 +56,22 @@ def save(): run_date=datetime, replace_existing=True) elif type == 'interval': + # load time + time = dt.strptime(time, "%H:%M:%S").time() + interval_seconds = 0 + if time.hour != 0: + interval_seconds += time.hour * 60 * 60 + if time.minute != 0: + interval_seconds += time.minute * 60 + if time.second != 0: + interval_seconds += time.second scheduler.add_job( func=getattr(tasks, functions), id=_id, name=name, args=(1, 1), trigger=type, + seconds=interval_seconds, replace_existing=True) elif type == 'cron': scheduler.add_job( @@ -71,7 +81,6 @@ def save(): args=(1, 1), trigger=type, replace_existing=True) - return success_api() @@ -96,9 +105,9 @@ def dis_enable(): return fail_api(msg="数据错误") -@admin_task.delete('/remove/') +@admin_task.delete('/remove//') def remove_job(_id): # 移除 - scheduler.remove_job(str(_id)) + scheduler.remove_job(_id) return success_api(msg="删除成功") # scheduler.add_job(func=task1, id='2', args=(1, 1), trigger='cron', day_of_week='0-6', hour=18, minute=24,