Python 如何获得完成芹菜任务所需的估计时间?
我正在努力获得完成芹菜任务所需的估计时间。例如,如果用户在前端触发任务A(可能通过单击按钮触发对后端的REST API调用),它将显示一个计时器,显示任务完成所需的时间 如果我没有正确阅读西芹的文档,我可以得到预定任务的预计到达时间。但是刚刚执行的当前任务呢Python 如何获得完成芹菜任务所需的估计时间?,python,rabbitmq,celery,fastapi,Python,Rabbitmq,Celery,Fastapi,我正在努力获得完成芹菜任务所需的估计时间。例如,如果用户在前端触发任务A(可能通过单击按钮触发对后端的REST API调用),它将显示一个计时器,显示任务完成所需的时间 如果我没有正确阅读西芹的文档,我可以得到预定任务的预计到达时间。但是刚刚执行的当前任务呢 我最初的想法是将以前发生的类似任务的执行时间存储在数据库中,并可能做一个平均值,作为所需的估计时间。如果有人能在上面的例子中分享一些经验,那就太好了。非常感谢 方法1:使用计时装饰器 import time import functools
我最初的想法是将以前发生的类似任务的执行时间存储在数据库中,并可能做一个平均值,作为所需的估计时间。如果有人能在上面的例子中分享一些经验,那就太好了。非常感谢 方法1:使用计时装饰器
import time
import functools
def timer(func):
@functools.wraps(func)
def _wrapper(*args, **kwargs):
start = time.perf_counter()
val = func(*args, **kwargs)
end = time.perf_counter()
elapsed_time = end - start
task_info = {"time": elapsed_time, task_args: args, task_kwargs: kwargs}
# do something with this task_info, i.e log or save in db to be used for analysis later
return val
return _wrapper
@app.task(name="task1")
@timer
def task1(...):
...
方法2:使用芹菜信号
import time
from celery.signals import task_prerun, task_postrun
tasks = {}
@task_prerun.connect
def task_prerun_handler(task_id, task, **extras):
""" Dispatched before a task is executed. """
tasks[task_id] = time.perf_counter()
@task_postrun.connect
def task_postrun_handler(task_id, task, **extras):
""" Dispatched after a task has been executed. """
end = time.perf_counter()
elapsed_time = end - tasks.pop(task_id)
# do something with this task_info, i.e log or save in db to be used for analysis later
您可以查看的资源: