繁体   English   中英

记录芹菜任务队列的时间

[英]Log time on queue of celery tasks

我可以使用信号来记录任务执行时间,但我也想记录队列中的时间。 这对信号有可能吗? 我应该使用哪些信号?

任务事件可用于基于任务的事件来监视和触发动作。 任务发送、任务接收、任务开始、任务成功、任务失败、任务拒绝、任务撤销、任务重试是 celery 中支持的任务事件。 有关更多详细信息,请参阅此链接 要记录任务在队列中等待的时间,请使用相应的任务事件处理程序获取任务创建(或添加到作业队列)时间和任务开始时间。 它们的差异将给出队列中作业的等待时间。 下面是一个关于如何实现它的示例 python 代码。

    from celery import Celery
    redis = Redis(host='workerdb', port=6379, db=0)
    taskId_startTime = {}
    taskId_createTime = {}

    def my_monitor():
        app = Celery('vwadaptor', broker='redis://workerdb:6379/0',backend='redis://workerdb:6379/0')
        state = app.events.State()

        def announce_task_received(event):
            state.event(event)
            task = state.tasks.get(event['uuid'])
            taskId_createTime[task.uuid] = task.timestamp 

        def announce_task_started(event):
            state.event(event)
            task = state.tasks.get(event['uuid'])
            taskId_startTime[task.uuid] = task.timestamp 

        def announce_task_succeeded(event):
            state.event(event)
            task = state.tasks.get(event['uuid'])
            print "wait time in queue", taskId_startTime[task.uuid] - taskId_createTime[task.uuid] 

        with app.connection() as connection:
            recv = app.events.Receiver(connection, handlers={
                    'task-received': announce_task_received, 
                    'task-started': announce_task_started, 
                    'task-succeeded': announce_task_succeeded, 
            })
            recv.capture(limit=None, timeout=None, wakeup=True)


    my_monitor()

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM