是否有一种简单的方法来衡量Celery任务处理和成功完成所需的时间?有一个intercept response,但第一个答案是丑陋的,不幸的是,我没有像第二个答案所说的那样给我发信号。
Flower UI有一个private static class ViewHolder {
private CustomListener listener;
private Button incrementBtn;
}
列,但它的API不允许获取批量任务。
答案 0 :(得分:2)
任务事件可用于获取任务的运行持续时间。有关详细信息,请参阅此link。任务发送,任务接收,任务启动,任务成功,任务失败,任务拒绝,任务撤销,任务重试是芹菜支持的任务事件。为了衡量任务持续时间,“任务成功”#39;事件可以使用。请在下面找到代码段。
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()
答案 1 :(得分:0)
创建任务时,存储{task_id:start_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
然后从开始和结束开始计算你的长度
可能有更好的方法,但我即将走出新的一年。
编辑:您可能需要处理已检索的任务