2015-11-22 55 views
1

運行芹菜任務後,我得到以下信息輸送到標準輸出:提取運行和完成的時間從芹菜任務:

[2015-11-22 21:08:52,158: INFO/MainProcess] Task jobs.tasks.some_task[9c37f17b-dec4-4cb0-ab2b-fb5e997e430a] 
succeeded in 2.9128301960008685s: 0.9731072908536255 

我想以編程方式(這裏解壓完成時間:2015-11 -22 21:08:52)和運行時(2.9128301960008685s)並將這些顯示給用戶。

如何從AsyncResult中提取這些值?

經紀人是RabbitMQ。

+0

我想你可以只記錄任務開始和結束時間,並將它們一起返回結果 – georgexsh

回答

0

使用celery任務事件來獲取任務運行時間和完成時間。有關任務事件的更多詳細信息,請參閱此link

from celery import Celery 
import datetime 
taskId_startTime = {} 
taskId_addedTime = {} 

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 "runtime: ", task.runtime 
     print "time of completion: ", datetime.datetime.now() 

    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()