完成定时器开发
This commit is contained in:
5
.gitignore
vendored
5
.gitignore
vendored
@@ -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
3
.idea/misc.xml
generated
@@ -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>
|
||||||
7
main.py
7
main.py
@@ -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"))
|
|
||||||
|
|||||||
@@ -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)
|
||||||
for k, v in kwargs.items():
|
|
||||||
if k not in ('year', 'month', 'day', 'week', 'day_of_week', 'hour', 'minute', 'second', 'start_date', 'end_date'):
|
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
|
||||||
pass
|
fh.setFormatter(formatter)
|
||||||
else:
|
|
||||||
params[k] = v
|
logger.addHandler(fh)
|
||||||
print(params)
|
|
||||||
|
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():
|
||||||
|
if k not in ('trigger','args', 'kwargs', 'id', 'name', 'misfire_grace_time', 'coalesce'
|
||||||
|
'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:
|
||||||
|
params[k] = v
|
||||||
|
|
||||||
|
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
|
||||||
Reference in New Issue
Block a user