【问题标题】:How to pass dajngo request parameter to celery task如何将 django 请求参数传递给 celery 任务
【发布时间】:2019-11-13 20:31:11
【问题描述】:

无法将 Django 请求参数传递给 celery 任务

我正在像这样调用 celery 任务方法。 My_task((request, application_data.id), task_id=task_id)

而我的任务方法是这样的: @shared_task(name="create-cloud-storage-task") def My_task(request_data, id):

但是它抛出错误说无法发送请求对象? 这段代码有什么问题

【问题讨论】:

  • 由于 Celery 是一个分布式系统,你无法知道任务将在哪个进程中运行,甚至在哪台机器上运行,因此最好通过请求对象提取所需的信息并将其发送给 celery任务作为参数。
  • 但是我希望我的所有请求参数都可以在任务中使用,并且参数计数超过 15。向任务发送 15 个参数是个好主意
  • 然后将它们作为 kwargs(关键字参数)发送

标签: django-rest-framework celery


【解决方案1】:

由于请求对象包含对无法序列化的事物的引用(例如上传的文件或与请求关联的套接字),因此没有通用的方法对其进行序列化。

相反,您应该只取出并传递您需要的部分。例如,类似:

如果您在任务中使用 user_id,或者您将使用的任何其他内容。

My_task((request.user.id, application_data.id), task_id=task_id)

@shared_task(name="create-cloud-storage-task")
def My_task(request_user_id, id):

参考:passing django request object to celery task

【讨论】:

    猜你喜欢
    • 2018-10-07
    • 2018-10-19
    • 2014-09-12
    • 2016-02-28
    • 2018-01-04
    • 2018-10-01
    • 2014-03-12
    • 1970-01-01
    • 2012-03-22
    相关资源
    最近更新 更多