我想弄清楚APScheduler是否是满足我项目需求的工具。
我可以添加一份工作。
我可以获得一份工作清单 - 但我无法解释结果。我希望我的程序将此返回的作业列表转换为程序其他部分所需的格式。我需要提取触发器参数。
假设我正在使用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 :(得分:1)
好的,感谢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': '*'}]
答案 1 :(得分:1)
把这个放在这里给那些试图找到他们的 Job 对象不同属性的人。
由于该对象不使用 __dict__
,请改用 __slots__
。这将向您显示作业对象的所有不同属性,就像 __dict__
一样。
>>> scheduler.get_jobs()[0].__slots__
('_scheduler', '_jobstore_alias', 'id', 'trigger', 'executor', 'func', 'func_ref', 'args', 'kwargs', 'name', 'misfire_grace_time', 'coalesce', 'max_instances', 'next_run_time', '__weakref__')
然后根据这些信息,您可以检索属性
>>> scheduler.get_jobs()[0].trigger
<IntervalTrigger (interval=datetime.timedelta(seconds=1200), start_date='2021-08-06 10:01:19 CDT', timezone='America/Chicago')>
>>> scheduler.get_jobs()[0].max_instances
1
答案 2 :(得分: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 中的变量。