python: run程序模板(定时任务和线程启动)
1. run程序-定时任务和线程启动
#!/usr/bin/env python
# -*- encoding: utf-8 -*-
"""
"""
import datetime
import threading
import time
from apscheduler import events
from apscheduler.events import JobEvent
from apscheduler.executors.pool import ThreadPoolExecutor, ProcessPoolExecutor
from apscheduler.schedulers.background import BackgroundScheduler
from apscheduler.triggers.cron import CronTrigger
from loguru import logger
from ycyj_zhongtai.apis_gongshi.trade_day.trade_day_run import TradeDayRun
executors = {
'default': ThreadPoolExecutor(max_workers=30),
'processpool': ProcessPoolExecutor(max_workers=30)
}
job_defaults = {
'coalesce': False,
'max_instances': 3
}
class RunExample(object):
def __init__(self):
self.tn = '例子'
self.schedular = BackgroundScheduler(executors=executors, job_defaults=job_defaults, daemonic=False)
# self.scheduler = BackgroundScheduler()
self.a_s = 540 # 9:00
self.a_e = 690 # 11:30
self.p_s = 780 # 13:00
# self.p_e = 900 # 15:00
self.p_e = 960 # 16:00
def get_now_min(self):
"""
540 == 9:00
:return:
"""
now_t = datetime.datetime.now()
now_min = now_t.hour * 60 + now_t.minute
return now_min
def run_job(self):
logger.info('Hello World')
def init_job_listener(self, event):
if isinstance(event, JobEvent):
if event.code == events.EVENT_JOB_EXECUTED:
logger.info("{} 任务执行成功 event.job_id={}".format(self.tag_name, event.job_id))
elif event.code == events.EVENT_JOB_ERROR:
logger.error("{} 任务执行失败 event.job_id={}".format(self.tag_name, event.job_id))
else:
pass
def start_while_run(self):
self.run_job()
while True:
now_min = self.get_now_min()
if TradeDayRun.is_trade_day and (self.a_s <= now_min <= self.a_e or self.p_s <= now_min <= self.p_e):
self.run_job()
time.sleep(1)
else:
time.sleep(120)
def start_with_schedular(self):
# 开始
self.run_job()
self.schedular.add_listener(self.init_job_listener)
# 例子
trade_day = CronTrigger(day_of_week='mon-fri', hour='00', minute='00', second='30')
self.schedular.add_job(id='trade_day', func=TradeDayRun().trade_day_update, trigger=trade_day, coalesce=True,
misfire_grace_time=60 * 5, max_instances=5)
trigger_id = CronTrigger(day_of_week='mon-fri', hour='09', minute='25', second='00')
self.schedular.add_job(id='trigger_id', func=self.run_job, trigger=trigger_id, coalesce=True,
misfire_grace_time=60 * 5, max_instances=5)
self.schedular.start()
def start_with_thread(self):
f_thread = threading.Thread(target=self.run_job)
f_thread.start()
def start_with_thread_and_schedular(self):
self.start_with_thread()
self.start_with_schedular()
def start(self):
self.start_with_thread()
self.start_with_schedular()
if __name__ == '__main__':
TradeDayRun().start_run()
# RunExample().start_with_thread()
# RunExample().start_with_schedular()
RunExample().start()
2.

浙公网安备 33010602011771号