【问题标题】:How to get Task ID in celery django from the currently running Shared Task itself?如何从当前运行的共享任务本身获取 celery django 中的任务 ID?
【发布时间】:2018-11-27 16:06:14
【问题描述】:

在我的views.py 中,我正在使用 celery 运行tasks.py 中的共享任务。

这是我从views.py 拨打电话的方式

task = task_addnums.delay()
task_id = task.id

tasks.py 看起来像

from celery import shared_task
from celery.result import AsyncResult


@shared_task
def task_addnums():
   # print self.request.id
   # do something
    return True

现在,我们可以看到,我们已经在 views.py 中拥有来自 task.id 的 task_id。但是,假设我想从 shared_task 本身获取任务 ID,我该怎么办?目标是从task_addnums 本身获取任务ID,这样我就可以使用它来传递给其他函数。 我尝试使用 self.request.id 考虑到第一个参数是 self 。但它没有奏效。

【问题讨论】:

  • 您无法从task_addnums 获得它——这是一个简单的功能。您需要以某种方式存储该 id - 在缓存中或在上下文中作为参数传递。
  • 我怎么能把它作为参数传入。它在调用 delay() 后被分配。你有什么想法@Chiefir
  • 你需要展示更多你的视图以及你想要传递task.id的位置
  • 我需要从task_addnums 本身内部访问task id。原因是,因为我会将该任务 ID 传递到我从 task_addnums() 调用的函数中。所以,views.py 中的 task_id 是没用的@Chiefir

标签: django django-views celery


【解决方案1】:

current_task from celery 会得到当前任务。代码如下:

from celery import shared_task, current_task

@shared_task
def task_addnums():
    print(current_task.request)
    # do something
    return True

【讨论】:

    【解决方案2】:

    解决了。

    这个答案是宝石Getting task_id inside a Celery task

    您可以通过function_name.request.id 获取任务ID。

    【讨论】:

      猜你喜欢
      • 2011-03-19
      • 2013-12-09
      • 1970-01-01
      • 2021-04-01
      • 1970-01-01
      • 2019-12-29
      • 2015-11-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多