You can use celery signals , registered functions will be called before and after the task is completed, measure elapsed time trimerically:
from time import time from celery.signals import task_prerun, task_postrun d = {} @task_prerun.connect def task_prerun_handler(signal, sender, task_id, task, args, kwargs): d[task_id] = time() @task_postrun.connect def task_postrun_handler(signal, sender, task_id, task, args, kwargs, retval, state): try: cost = time() - d.pop(task_id) except KeyError: cost = -1 print task.__name__, cost
source share