python - 为什么 Celery 不将时间戳嵌入到排队消息中?

标签 python celery distributed

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

注意: celery ==3.0.12

最佳答案

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

对于事件流,情况有所不同,因为任务启动任务成功时间戳均来自同一时钟源。

也就是说,有时近似值会很有用,因此您可以添加此值 自己的信息:

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

您可以访问任务中的消息 header (但请注意,这需要 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

关于python - 为什么 Celery 不将时间戳嵌入到排队消息中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21108840/

相关文章:

python - Mongod 占用 100% CPU - 不确定如何诊断?

python - 开发库模块时设置Python路径

python - re.findall...发现太多了! :)

python - celeryd 和 celerybeat - "Received unregistered task of type..."

storage - Ceph 对象存储 (RADOS) 中对象的最佳大小

queue - 分布式队列是如何架构的?

python - mypy:方法的参数与父类(super class)型不兼容

python - celery 任务不适用于 gevent

Celery Canvas 行为在异步模式和急切模式之间有所不同

erlang - 连接到另一个节点上生成的进程