Пример #1
0
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!')
Пример #2
0
 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.')
Пример #3
0
 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.')
Пример #4
0
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
Пример #5
0
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!')
Пример #6
0
def run_task(name, module):
    run_function = module.task
    write_log('main', 'start run task===> ' + name)
    run_function()
    write_log('main', 'task done ===> ' + name)