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.id
和 current_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/
我看过 this one and a dozen
我有一个 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.id
和 current_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/