完成定时器开发

This commit is contained in:
lzybetter
2023-09-02 18:08:02 +08:00
parent c6d816c5ec
commit dee435d6b3
4 changed files with 92 additions and 19 deletions

5
.gitignore vendored
View File

@@ -1,5 +1,10 @@
### test file ### test file
test.py test.py
*.log
### config file
*.yaml
*.db
### venv template ### venv template
# Virtualenv # Virtualenv

3
.idea/misc.xml generated
View File

@@ -1,4 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<project version="4"> <project version="4">
<component name="ProjectRootManager" version="2" project-jdk-name="Python 3.7 (myAssistant)" project-jdk-type="Python SDK" /> <component name="ProjectRootManager" version="2" project-jdk-name="Python 3.7 (myAssistant)" project-jdk-type="Python SDK" />
<component name="PyCharmProfessionalAdvertiser">
<option name="shown" value="true" />
</component>
</project> </project>

View File

@@ -1,7 +0,0 @@
from util.global_config import GlobalConfig
http_proxy_config = GlobalConfig()
http_proxy_config.set_globalconfig("http_proxy", '127.0.0.1:8889')
print(http_proxy_config.get_globalconfig("http_proxy"))
print(http_proxy_config.get_globalconfig("https_proxy"))

View File

@@ -1,14 +1,86 @@
import datetime import sqlite3
import re from apscheduler.util import undefined
from apscheduler.schedulers.background import BackgroundScheduler import logging
import uuid
def add_interval_schedule(type='interval', **kwargs): logger = logging.getLogger("scheduler_logger")
logger.setLevel(logging.DEBUG)
if (type == 'interval'): fh = logging.FileHandler('mylog.log')
params = {} fh.setLevel(logging.DEBUG)
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
fh.setFormatter(formatter)
logger.addHandler(fh)
def add_interval_schedule(schedudler, func, **kwargs):
params = {
'args': None,
'kwargs': None,
'name': None,
'misfire_grace_time': undefined,
'coalesce': undefined,
'max_instances': undefined,
'next_run_time': undefined,
'jobstore': 'default',
'executor': 'default',
'trigger': 'interval',
'replace_existing':False}
for k, v in kwargs.items(): for k, v in kwargs.items():
if k not in ('year', 'month', 'day', 'week', 'day_of_week', 'hour', 'minute', 'second', 'start_date', 'end_date'): if k not in ('trigger','args', 'kwargs', 'id', 'name', 'misfire_grace_time', 'coalesce'
pass 'max_instances', 'next_run_time', 'jobstore', 'executor', 'replace_existing',
'trigger', 'days', 'weeks', 'hours', 'minutes', 'seconds', 'start_date', 'end_date'):
logger.error('%s is not supported'%k)
else: else:
params[k] = v params[k] = v
print(params)
if params['name']:
logger.info('定时器\'%s\'的参数为%s' % (params['name'], params))
else:
logger.info('定时器\'%s\'的参数为%s'%(func.__name__, params))
id = str(uuid.uuid1())
try:
schedudler.add_job(id=id, func=func, **params)
return "定时器添加成功"
except Exception as e:
logger.error("定时器添加失败,错误信息:%s"%e)
return "定时器添加失败详细信息请见log文件"
def del_scheduler(scheduler, id):
if query_scheduler(id):
try:
scheduler.remove_job(id)
return "已删除:%s"%id
except Exception as e:
logger.error("定时器删除失败,错误信息:%s" % e)
return "定时器删除失败详细信息请见log文件"
else:
return "定时器删除失败无该id的job: %s"%id
logger.info("无该id的job: %s"%id)
def query_scheduler(id=None):
db_path = 'config/scheduler/jobstores.db'
conn = sqlite3.connect(db_path)
cur = conn.cursor()
cur.execute("SELECT name FROM sqlite_master WHERE type='table' AND name='apscheduler_jobs';")
is_table_exists = cur.fetchall()
result = []
if is_table_exists and id:
cur.execute("select * from apscheduler_jobs where id='%s'"%id)
result = cur.fetchall()
else:
cur.execute("select * from apscheduler_jobs")
result = cur.fetchall()
if result:
return True
else:
return False
def get_scheduler_list(scheduler):
job_infos = []
for j in scheduler.get_jobs():
job_infos.append({'id': j.id, 'name': j.name})
return job_infos