Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/361.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在任务中获得芹菜节拍触发时间_Python_Django_Celery_Django Celery_Celerybeat - Fatal编程技术网

Python 在任务中获得芹菜节拍触发时间

Python 在任务中获得芹菜节拍触发时间,python,django,celery,django-celery,celerybeat,Python,Django,Celery,Django Celery,Celerybeat,我正试图找到一种方法来获取触发芹菜节拍触发任务的时间条件 获取datetime.now()时,由于所有芹菜工人都很忙,因此通常会偏离芹菜节拍对任务进行排队的时间。 例如:我将任务设置为每天12:30执行,但由于任务在12:31开始运行时所有工人都很忙 我需要知道哪个时间条件触发了任务,而与任务执行的时间无关 编辑: 我是这样定义我的定期任务的: CELERYBEAT_SCHEDULE = { 'periodic_clear_task': { 'task': 'app.tasks.peri

我正试图找到一种方法来获取触发芹菜节拍触发任务的时间条件

获取
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': ()
},
}

我面临着同样的问题,我想在周期性芹菜任务中使用任务触发时间而不是执行时间。我在芹菜任务中找不到具有任务触发时间的确切字段。作为一种方法,我使用了过期的任务时间

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))
    
    ...

调用任务时,可以将datetime.now()作为参数传递?@JensAstrup我该怎么做?编辑:我刚刚编辑了这个问题,以包含我的定期任务的定义。我刚刚记住,调度程序在芹菜工人启动后即被处理,而不是每次它运行任务时。换句话说,将datetime作为参数传递只会给您提供启动worker的时间,这是没有帮助的。有可能你要找的东西在Hi Leonel有售,你能得到这个答案吗?“我也想做同样的事情。”MohammadMustaqeem不幸的是没有。最后,我把那些需要更快触发时间的任务排在他们自己的队列中,这样他们就不必等到其他任务完成,这就解决了我的问题。这可能无法解决场景中的问题。这对我来说很有效,因为这些任务并不多,可以移动到另一个队列,而不用担心顺序执行会丢失。如果你还有其他问题,尽管问。