我试图找到一种方法来获得触发芹菜击败任务的时间条件。
由于所有芹菜工人都很忙,获得datetime.now()
经常偏离芹菜排队任务排队的时间。
例如:我将任务设置为每天12:30执行,但由于所有工作人员在12:31开始运行任务时都很忙。
无论执行任务的时间如何,我都需要知道触发任务的时间条件。
编辑:
这就是我定义周期性任务的方式:
CELERYBEAT_SCHEDULE = {
'periodic_clear_task': {
'task': 'app.tasks.periodic_clear_task',
'schedule': crontab(hour=2),
'args': ()
},
'periodic_update_task': {
'task': 'app.tasks.periodic_update_task',
'schedule': crontab(minute='00,30'),
'args': ()
},
}
答案 0 :(得分:0)
我遇到了同样的问题,我想在定期芹菜任务中使用任务触发时间而不是执行时间。我在具有任务触发时间的芹菜任务中找不到确切的字段。作为一种解决方法,我使用了任务的过期时间。
task_expires_day =30
@app.on_after_configure.connect
def df_beat_setup(sender, **kwargs):
pipeline_config = {}
sender.add_periodic_task(
crontab(
minute=0,
hour=8,
),
df_scheduler_task.s(),
args=(pipeline_config),
name="df_trigger",
queue="df_scheduler_queue",
expires=60*60*24*task_expires_day,
options={"time": datetime.now()}
)
@app.task(name="df_scheduler_queue", bind=True, acks_late=True)
def df_scheduler_task(task: "celery.Task", pipeline_config: Dict, time: str) -> dict:
task_trigger_time = parser.parse(task.request.expires)-timedelta(days=task_expires_day))
...