【问题标题】:get task name of celery AsyncResult获取 celery AsyncResult 的任务名称
【发布时间】:2017-01-25 19:00:58
【问题描述】:

我正在使用 celery 来执行我的异步任务,我想要实现的是在我执行之后获取工作流程中每个任务的名称和 ID。

        exec_workflow = chain(
            task1.si(),
            task2.si(),
            task3.si()
    )

    result = exec_workflow.apply_async()

    tasks = []
    for t in result._parents():
        tasks.append({"id": t.id, "name": t.name})

但由于某种奇怪的原因,AsyncResult 似乎没有 name 属性。知道什么是合适的方法吗?

对此的不同方法可能是在我执行 apply_async 之前在每个任务上强制一个 id,这将解决我的问题,因为我将能够将 id 与任务名称匹配。但我不确定它是否可能。

谢谢。

【问题讨论】:

    标签: python celery


    【解决方案1】:

    不是最好的解决方案,但它有效。

    result = signature.apply_async()
    result._cache['task_name']
    #'procedures.tasks.stop'
    

    【讨论】:

      【解决方案2】:

      Celery 中有一个配置选项result_extended 用于此目的(默认设置为False)。

      允许将扩展任务结果属性(名称、参数、kwargs、worker、重试次数、队列、delivery_info)写入后端。

      参考: https://docs.celeryproject.org/en/master/userguide/configuration.html#result-extended

      消费者示例(工人)

      from typing import Final
      
      from celery import Celery
      
      app: Final = Celery(
          broker="amqp://...",
          result_backend="redis://...",
          result_extended=True,
      )
      
      @app.task(
          name="foo-service:bar"
      )
      def _() -> int:
          return 42
      

      生产者示例(客户端)

      from pprint import pprint
      from typing import Final
      
      from celery import Celery
      from celery.result import AsyncResult
      
      app: Final = Celery(broker="amqp://...", result_backend="redis://...")
      
      result: AsyncResult = app.send_task("foo-service:bar")
      assert result.get() == 42
      assert result.name == "foo-service:bar"
      assert result.queue == ...
      assert result.args == ...
      assert result.kwargs == ...
      assert result.worker == ...
      pprint(result.__dict__)
      

      【讨论】:

        【解决方案3】:

        好的,我已经解决了我的问题。我最终所做的只是设置每个任务的 id 属性。

        【讨论】:

        • 你能举个例子吗?
        • 由于缺乏答案而被否决。 Stackoverflow 是一个 QA 资源,无用的答案对任何人都没有帮助
        猜你喜欢
        • 2012-11-22
        • 2023-02-23
        • 1970-01-01
        • 1970-01-01
        • 2013-03-12
        • 1970-01-01
        • 1970-01-01
        • 2013-10-14
        • 2015-07-21
        相关资源
        最近更新 更多