使用芹菜,是否可以从任务内检查该任务最后一次运行的时间?
我想实现"抓取上次运行后的所有内容"。我既可以自己跟踪最后一次运行的时间戳,也可以从芹菜中访问它。
默认情况下,芹菜没有任务结果的永久存储,如果您在beat模式下运行,一些干净的进程将运行干净的任务结果和执行信息。我建议你使用NoSQL来存储每个最后的执行日期,你可以在你的任务中重写方法after_return
def after_return(self, status, retval, task_id, args, kwargs, einfo):
#exit point for context managers
self.taskLogger.__exit__(status, retval, task_id, args, kwargs, einfo)
这个方法在每次任务结束时调用,有任何结果,通过检查状态,您可以仅在任务以SUCCESS完成或实现最适合您需要的行为时存储日期。
如果你使用的是django-芹菜,last_run at会保存在模型中。使用普通的django ORM根据任务名来过滤PeriodicTask模型。
from djcelery.models import PeriodicTask
last_run = PeriodicTask.objects.only('last_run_at').get(task='TASK_NAME_HERE').last_run_at
在最新版本的芹菜(5.1.2)中,可以通过此代码获得任务的最后运行时间。
#tasks.py
from django_celery_beat.models import PeriodicTask
@shared_task(bind=True)
def backup_everyday(self)
try:
last_run = PeriodicTask.objects.get(task=self.name).last_run_at
except:
last_run = None
backup everyday只是一个示例函数。PeriodicTask模型有一个名为"last_run_at"的属性。