繁体   English   中英

从列表中安排所有作业

[英]Schedule all jobs from the list

我从数据库中提取了一个清单,格式如下:

task_list = [
("script_to_run.py", date(2019,8,12), time(10,20), "one time"),
("script2_to_run.py", date(2019,8,12), time(10,30), "daily"),
("script3_to_run.py", date(2019,8,12), time(10,40), "daily")]

现在在for循环中,我尝试结合日期和时间来设置要与APscheduler进行调度的作业,但是首先我想将每日和一次性作业分开:


def send_jobs():
    for i in task_list:
        if i[3] =='one time':
            one_time_schedule(i)
        if i[3] =='daily':
             daily_schedule(i)

现在,第一个任务是“一次”:

def one_time_schedule(row):
    date_time = datetime.combine(row[1],row[2])
    sched.add_jos(function, "date", run_date = date_time)

然后在主要:

sched = BackgroundSchedule()
send_jobs()
sched.start()

对我来说,问题是该程序进入send_jobs方法,标识了第一个作业,并将其发送到方法one_time_scheduler() 在那里添加了作业,但是程序不会返回到下一个作业,即列表中的第二个元素,因此我仅添加了一个作业而不是多个作业来完成程序。

打印时的结果是:

print(shed.get_jobs())
[<Job (id= 5213437jopf56423a name=function)>]

你可以尝试一下:

from apscheduler.schedulers.background import BackgroundScheduler
from datetime import datetime, date, time

schedule = BackgroundScheduler()


def daily_job(): pass

def one_time_job(): pass


task_list = [
    ('script_to_run.py', date(2019, 8, 12), time(10, 20), 'one time'),
    ('script2_to_run.py', date(2019, 8, 12), time(10, 30), 'daily'),
    ('script3_to_run.py', date(2019, 8, 12), time(10, 40), 'daily')]

for script, task_date, task_time, frequency in task_list:
    if frequency == 'daily':
        run_date = datetime.combine(task_date, task_time)
        schedule.add_job(func=daily_job,
                         trigger='date',
                         run_date=run_date)
    else:       
        schedule.add_job(func=one_time_job,
                         trigger='cron',
                         hour=task_time.hour,
                         minute=task_time.minute)
schedule.start()

我得到的输出是:

>> print(schedule.get_jobs())
[<Job (id=13028449c2a44b169fee37dfbacb2742 name=one_time_job)>,
 <Job (id=647e0e2c90ef4e35a3b03dbeec794197 name=daily_job)>,
 <Job (id=65d352d400f64287a80f5cb06fcb5f03 name=daily_job)>]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM