定时任务说明
from apscheduler.schedulers.blocking import BlockingScheduler
# 定时任务 cron
@gl_error_register # 装饰器,用于捕捉程序异常的操作
def time_job(func):
'''
定时执行 func 函数
:param func:函数名
:return:
'''
scheduler = BlockingScheduler(timezone="Asia/Shanghai")
scheduler.add_job(func, 'cron', day_of_week='0-6', hour=16, minute=26) # day_of_week:0-6 周日到周六, 参数:每一天的16:26分执行任务func函数
scheduler.start()
'''
更多参数参考
#每300秒执行一次
scheduler .add_job(job, 'interval', seconds=300)
#在1月,3月,5月,7-9月,每天的下午2点,每一分钟执行一次任务
scheduler .add_job(func=job, trigger='cron', month='1,3,5,7-9', day='*', hour='14', minute='*')
# 当前任务会在 6、7、8、11、12 月的第三个周五的 0、1、2、3 点执行
scheduler .add_job(job, 'cron', month='6-8,11-12', day='3rd fri', hour='0-3')
#从开始时间到结束时间,每隔俩小时运行一次
scheduler .add_job(job, 'interval', hours=2, start_date='2018-01-10 09:30:00', end_date='2018-06-15 11:00:00')
'''
BlockingScheduler的timezone参数需添加
timezone参数需要设置,否则可能会出现报错 Timezone offset does not match system offset: 0 != -32400. Please, check your config file
装饰器说明
# 装饰器部分
# 捕捉异常和处理 邮件通知
def gl_error_register(actual_do,mac_address=None,device_type=None):
def add_robust(*args, **keyargs):
try:
return actual_do(*args, **keyargs)
except Exception as ex:
ex_type, ex_val, ex_stack = sys.exc_info()
# 错误类型
error_result = str(ex_type)+"\n"
# 报错内容
error_result += str(ex_val)+"\n"
# 报错的对象
error_result += str(ex_stack)+"\n"
# print(ex_type)
# print(ex_val)
for stack in traceback.extract_tb(ex_stack):
print(stack)
error_result+=str(stack)+"\n"
print('Error execute: %s' % actual_do.__name__)
print([error_result])
# 发送程序崩溃通知邮件
email_html="""
邮件通知内容:
%s
"""%error_result # 注意报错内容的<>符号,会被邮件转义,建议替换成 []
email_app = email_send() # 自定义 发送邮件类
email_app.my_send_email(email_html, title='【邮件标题】',
target_email_list=EMAIL_CONFIG['send_target'])
time.sleep(5) # 发送完邮件 阻塞5S
return error_data
return add_robust