python - 安排列表中的所有作业
问题描述
我从数据库中提取了一个列表,格式如下:
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)>]
推荐阅读
- javascript - Node.js中如何根据特定条件对数组中的对象进行分组,使它们不是同一个对象?
- numpy - 从 anaconda 环境运行 python 和 numpy 1.18 的 Gitlab CI 运行程序
- json - 使用 PostgreSQL 从 json 中提取数据的问题
- reactjs - 如何使用 aws cognito 联合身份处理重定向
- anylogic - 未解决:从具有动态事件的等待块中释放给定数量的托盘
- java - 如何将地图转换为 DTO
- java - 生成在终端中写入内存的随机代码
- assembly - powerpc-eavivle-gcc 不支持 e_and2i 指令
- tarantool - 如何获得空间中的最后一个元组?
- excel - 使用列号的列的最后一行