2024-05-17 12:13:44 发布
网友
我已经将一个独立的批处理作业转换为使用芹菜来分派要完成的工作。我在用RabbitMQ。所有操作都在一台机器上运行,没有其他进程使用RabbitMQ实例。我的脚本只是创建了一组由工人处理的任务。
有没有一种简单的方法来测量从脚本开始到所有任务完成的时间?我知道在使用消息队列时,这有点复杂。但我不想在生产中这样做,只是为了测试和获得性能评估。
您可以使用celery signals,在执行任务之前和之后都将调用已注册的函数,测量经过的时间很简单:
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, **extras): d[task_id] = time() @task_postrun.connect def task_postrun_handler(signal, sender, task_id, task, args, kwargs, retval, state, **extras): try: cost = time() - d.pop(task_id) except KeyError: cost = -1 print task.__name__, cost
您可以使用chord,方法是在末尾添加一个假任务,该任务将在发送任务的时间传递,并返回当前时间与执行时传递的时间之间的差异。
import celery import datetime from celery import chord @celery.task def dummy_task(res=None, start_time=None): print datetime.datetime.now() - start_time def send_my_task(): chord(my_task.s(), dummy_task.s(start_time=datetime.datetime.now()).delay()
send_my_task发送要分析的任务,同时发送一个dummy_task,打印任务所用的时间(或多或少)。如果您想要更精确的数字,我建议将开始时间直接传递给您的任务,并使用signals。
send_my_task
dummy_task
您可以使用celery signals,在执行任务之前和之后都将调用已注册的函数,测量经过的时间很简单:
您可以使用chord,方法是在末尾添加一个假任务,该任务将在发送任务的时间传递,并返回当前时间与执行时传递的时间之间的差异。
send_my_task
发送要分析的任务,同时发送一个dummy_task
,打印任务所用的时间(或多或少)。如果您想要更精确的数字,我建议将开始时间直接传递给您的任务,并使用signals。相关问题 更多 >
编程相关推荐