Celery - 如何获取 shared_task 的任务 ID?

Celery - How to get the task id for a shared_task?

我看过 this one and a dozen 这样的问题。但其中 none 似乎有效。

我有一个 shared_task 像这个,它没有 return 任何东西:

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

我已经尝试了 self.request.idcurrent_task.request.id,但它们都 returned None。 我的 celery 版本是 5.0.4,django 版本是 3.1.1。我正在使用 Rabbitmq 作为信使。

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

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/