为什么Celery没有在排队的邮件中嵌入时间戳?

时间:2014-01-14 08:26:19

标签: python celery distributed

我试图获取Celery排队任务的等待时间。据我所知,我可以通过Celery工作人员发布的事件流来实现。好奇心,为什么在排队的任务中没有嵌入简单的时间戳?这与分布式系统设计有关吗?

注意:芹菜== 3.0.12

1 个答案:

答案 0 :(得分:3)

您不能依赖分布式系统中的物理墙时间,因此这样的字段不会非常有用。

对于事件流,这是不同的,因为task-startedtask-succeeded时间戳都来自同一时钟源。

也就是说,有时候近似值可能很有用,所以你可以添加它 信息你自己:

add.apply_async((4, 4), headers={'time_sent': time.time()})

您可以访问任务中的邮件标题(但请注意,这需要Celery 3.1):

@app.task(bind=True)
def add(self, x, y):
    print('Approximate queue time: {0}'.format(
        time.time() - self.request.headers.get('time_sent', 0),
    ))
    return x + y