2017-07-30 934 views
1

我想弄清楚APScheduler是否是我项目需求的工具。如何解释APScheduler中从get_jobs返回的作业列表?

我可以添加一份工作。

我可以得到一份工作清单 - 但我无法解释结果。我想让我的程序将此返回的作业列表转换为程序其他部分所需的格式。我需要提取触发器参数。

假设我正在使用cron触发器。我会做一个简单的现在:

new_job = self.scheduler.add_job(jobfunc,'cron', minute='*/5', args=["minute"] 

后来,我想获得工作,然后提取基本信息(这是一个cron触发器,它是定于“分钟” = */5) - 基本上我想重建我创建触发器的参数。

我看过调试器中返回的作业,我发现每个作业都有一个“触发”成员,其中包含我需要的信息 - 但我不确定如何以编程方式访问它。

我愿做这样的事情:

jobs=self.scheduler.get_jobs() 
    schedules=[] 
    for job in jobs: 
    schedules.append(<do something with job.trigger.fields>) 

凡元素添加到日程看起来是这样的:

{'minute':'*/5'} 

文档说:

要获得一个机器可处理的计划作业列表,您可以使用get_jobs()

问题是,我的'机器'应该如何处理这个列表?

回答

0

好的,多亏了以前在APScheduler Google小组上提出的问题,我有一个解决方案!

细节必须通过字段访问,因为我认为。从单个字段获取信息的关键是将字段值转换为字符串。

这里是一个工作的例子:有一个作业添加

schedules = [] 
for job in self.scheduler.get_jobs(): 
    jobdict = {} 
    for f in job.trigger.fields: 
     curval = str(f) 
     jobdict[f.name] = curval 

    schedules.append(jobdict) 

对于一个时间表:

new_job = self.scheduler.add_job(jobfunc,'cron', second='*/5', args=["second"]) 

结果列表出来是这样的:

[{'week': '*', 'hour': '*', 'day_of_week': '*', 'month': '*', 'second': '*/5', 'year': '*', 'day': '*', 'minute': '*'}] 
0

APScheduler方法.get_jobs()返回作业实例列表。

例如,您可以打印有关的东西,如下面的所有目前预定作业的信息:

for job in scheduler.get_jobs(): 
    print("name: %s, trigger: %s, next run: %s, handler: %s" % (
      job.name, job.trigger, job.next_run_time, job.func)) 

注意作业名称可以在不同的工作重复。

你可以在这里找到API reference for the job class。它没有明确列出工作类成员,但它们与kwargs中的变量相匹配。

相关问题