2016-03-20 4 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()