【问题标题】:Celery - How to get the task id for a shared_task?Celery - 如何获取 shared_task 的任务 ID?
【发布时间】:2021-04-01 20:05:50
【问题描述】:

我看过像this 一个和一打others 这样的问题。但它们似乎都没有工作。

我有一个类似这样的 shared_task,它不返回任何内容:

@shared_task
def rename_widget(widget_id, name):
    w = Widget.objects.get(id=widget_id)
    w.name = name
    w.save()

我尝试过self.request.id 和current_task.request.id,但它们都返回无。 我的 celery 版本是 5.0.4,django 版本是 3.1.1。我正在使用 Rabbitmq 作为信使。

【问题讨论】:

  • 你试过了:rename_widget.request.id?
  • 是的,当然。返回无。
  • 抱歉,需要更多上下文:1. 你导入模型了吗?

标签: django celery


【解决方案1】:

似乎是设置问题,或者您调用任务的方式。在不了解更多上下文的情况下,很难说——也许您需要绑定方法?我已经勾勒出了这个解决方案:

tasks.py

from celery import shared_task
from demoapp.models import Widget

    @shared_task(bind=True)
    def rename_widget(self, widget_id, name):
        print(self.request.id) 
        w = Widget.objects.get(id=widget_id)
        w.name = name
        w.save()

views.py 或其他地方:

from tasks import rename_widget

result = rename_widget.delay(1, 'new_name')

如果这不是问题,我会查看完整的工作 Django 示例设置以获取想法,可在此处找到:https://github.com/celery/celery/tree/master/examples/django/

【讨论】:

  • 我就是这么称呼它的。谢谢。
猜你喜欢
  • 2011-03-19
  • 1970-01-01
  • 1970-01-01
  • 2023-02-23
  • 2018-11-27
  • 2014-12-24
  • 2019-10-17
  • 2021-03-15
  • 1970-01-01
相关资源
最近更新 更多