You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python Dramatiq 如何在actor方法中获取message id用于日志记录

Dramatiq actor内部获取当前任务message id的实现方法

首先需要启用Dramatiq内置的CurrentMessage中间件,该中间件会在worker执行任务的过程中维护当前消息的上下文,初始化broker时添加中间件的示例如下:

import dramatiq
from dramatiq.middleware import CurrentMessage
# 此处以RedisBroker为例,你也可以替换为你使用的其他broker实现
from dramatiq.brokers.redis import RedisBroker

broker = RedisBroker()
broker.add_middleware(CurrentMessage())
dramatiq.set_broker(broker)

之后在任意actor函数内,调用CurrentMessage.get_current_message()即可拿到当前正在执行的消息实例,直接读取message_id属性即可,你的示例代码修改后如下:

@dramatiq.actor
def fn(x, y):
    current_msg = CurrentMessage.get_current_message()
    if current_msg:
        # 此处可替换为你项目使用的日志组件输出
        print(f"处理任务,message_id: {current_msg.message_id}")
    return x + y

注意事项

  • 只有通过队列投递、在worker进程中执行的任务,才能拿到有效的消息对象。如果你在本地直接同步调用actor方法(比如直接执行fn(1,2)而非fn.send(1,2)投递任务),get_current_message会返回None,建议加非空判断避免空指针异常。
  • 如果需要所有任务日志都自动携带message_id,可自定义日志过滤器在日志输出时统一注入,不需要每个actor都手动重复写获取逻辑。

内容的提问来源于stack exchange,提问作者learningisfun

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 09:45:04