Python 如何测量芹菜任务持续时间
有没有一种简单的方法来衡量芹菜任务处理和成功完成所需的时间?有一个答案,但第一个答案是丑陋的,不幸的是,信号没有呼吁我作为第二个答案建议Python 如何测量芹菜任务持续时间,python,rabbitmq,celery,duration,Python,Rabbitmq,Celery,Duration,有没有一种简单的方法来衡量芹菜任务处理和成功完成所需的时间?有一个答案,但第一个答案是丑陋的,不幸的是,信号没有呼吁我作为第二个答案建议 FlowerUI有一个Runtime列,但它的API不允许获取批处理任务 创建任务时,存储{task\u id:start\u time} 我不确定您是如何得到结果的,但假设您正在做以下事情: for task in tasks: result = task.get() 您可以将其更改为: end_times = {} While len(end_t
FlowerUI有一个
Runtime
列,但它的API不允许获取批处理任务 创建任务时,存储{task\u id:start\u time}
我不确定您是如何得到结果的,但假设您正在做以下事情:
for task in tasks:
result = task.get()
您可以将其更改为:
end_times = {}
While len(end_times) != len(tasks):
for task in tasks:
if task.ready():
result = task.get()
end_times[task.id] = now() #proper datetime method
然后计算出你从开始到结束的长度
也许有更好的办法,但我正要出去过年
编辑:您可能需要处理已检索的任务任务事件可用于获取任务的运行时持续时间。有关更多详细信息,请参阅此。celery中支持的任务事件包括已发送任务、已接收任务、任务已启动、任务成功、任务失败、任务已拒绝、任务已撤销、任务重试。要度量任务持续时间,可以使用“任务成功”事件。请在下面找到代码片段
from celery import Celery
redis = Redis(host='workerdb', port=6379, db=0)
def my_monitor():
app = Celery('vwadaptor', broker='redis://workerdb:6379/0',backend='redis://workerdb:6379/0')
state = app.events.State()
def announce_task_succeeded(event):
state.event(event)
task = state.tasks.get(event['uuid'])
print "task runtime: ", task.runtime
with app.connection() as connection:
recv = app.events.Receiver(connection, handlers={
'task-succeeded': announce_task_succeeded,
})
recv.capture(limit=None, timeout=None, wakeup=True)
my_monitor()
你是想测量从创建任务到获得任务结果的时间,还是只想测量实际任务的时间长度?@BenMcAlindin,它们不同吗?基本上,我想测量创建任务直到返回结果的时间。对于一个任务,它不应该是(除了一些小的开销)。如果有许多任务排队,通常来自许多用户,这可能会导致某些任务被阻止,并需要更长的时间才能返回结果。@BenMcAlindin,这是有道理的。因此,这将是创建任务的时间,直到返回结果。完整往返。一个可能的技巧是使用日志消息:开始时有一条消息,结束时有一条消息:然后您可以看到每个任务的持续时间(考虑日志消息中的任务id)。芹菜任务上没有
运行时
属性。