2016-03-20 3 views

ответ

0

Заданные события могут использоваться для контроля и запуска действия на основе событий задачи. Заданные задачи, задачи, задачи, задачи, преуспевающие задачи, задачи с отказами, отказа от задачи, отмены задачи, повторения задачи, являются задачами , поддерживаемыми в сельдере. Для получения дополнительной информации см. Это link. Чтобы зарегистрировать время ожидания задачи в очереди, запустите задачу, созданную (или добавленную в очередь заданий) время и время запуска задачи, используя соответствующие обработчики событий задачи. Разница в них даст время ожидания задания в очереди. Ниже приведен пример кода 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() 
Смежные вопросы