def get_task(path='tasks'): write_log('main', 'start get task...') tmp_files = [file for file in os.listdir('tasks') if file.endswith('py')] for file in tmp_files: file_path = os.path.join(path, file) last_change_time = os.stat(file_path).st_mtime task = path + '.' + file[:-3] if task not in tasks: module = importlib.import_module(task) scheduler_dict[task] = [module, 'new', last_change_time] tasks.append(task) elif scheduler_dict[task][2] < last_change_time: module = importlib.reload(scheduler_dict[task][0]) scheduler_dict[task][0] = module scheduler_dict[task][1] = 'update' scheduler_dict[task][2] = last_change_time tmp_tasks = [path + '.' + file[:-3] for file in tmp_files] stop_tasks = set(tasks) - set(tmp_tasks) for task in stop_tasks: tasks.remove(task) scheduler_dict[task][1] = 'stop' scheduler_task() write_log('main', 'get task done!')
def on_failed_call(self): write_log(self.task_name, 'task failed, start send email...') to = [] cc = [] subject = '任务失败' html_content = 'example任务失败,请检查' mime_charset = 'utf8' send_eamil(to, subject, html_content, retry=3, cc=cc, mime_charset=mime_charset) write_log(self.task_name, 'done send email.')
def on_success_call(self): write_log(self.task_name, 'task successful, start send email...') to = [] cc = [] subject = '任务成功' html_content = 'example任务执行成功' mime_charset = 'utf8' send_eamil(to, subject, html_content, retry=3, cc=cc, mime_charset=mime_charset) write_log(self.task_name, 'done send email.')
def send_eamil(to, subject, html_content, retry=1, files=None, dryrun=False, cc=None, bcc=None, mime_subtype='mixed', mime_charset='us-ascii', **kwargs): for i in range(retry): write_log('main', '发送邮件...') try: _send_email(to, subject, html_content, files=files, dryrun=dryrun, cc=cc, bcc=bcc, mime_subtype=mime_subtype, mime_charset=mime_charset, **kwargs) write_log('main', '发送邮件成功') break except: write_log('main', '发送邮件失败 ==> ' + str(i + 1) + ', 最多尝试 ==> ' + str(retry)) pass
def scheduler_task(): write_log('main', 'start scheduler task...') stop_tasks = [] for k, v in scheduler_dict.items(): if v[1] == 'new': cron = v[0].task.cron job = scheduler.add_job(run_task, CronTrigger.from_crontab(cron), kwargs={ 'name': k, 'module': v[0] }) v[1] = 'schedule' v.append(job.id) write_log('main', 'creat new job ===> name: ' + k + '===> cron: ' + cron) elif v[1] == 'update': scheduler.remove_job(v[3]) cron = v[0].task.cron job = scheduler.add_job(run_task, CronTrigger.from_crontab(cron), kwargs={ 'name': k, 'module': v[0] }) v[1] = 'schedule' v[3] = job.id write_log('main', 'update job ===> name: ' + k + '===> cron: ' + cron) elif v[1] == 'stop': scheduler.remove_job(v[3]) stop_tasks.append(k) for stop_task in stop_tasks: scheduler_dict.pop(stop_task) write_log('main', 'stop job ===> name: ' + stop_task) write_log('main', 'scheduler task done!')
def run_task(name, module): run_function = module.task write_log('main', 'start run task===> ' + name) run_function() write_log('main', 'task done ===> ' + name)