python - 将 Django 请求对象传递给 celery 任务

标签 python django celery

我在 tasks.py 中有一个这样的任务:

@app.task
def location(request):
....

我正在尝试将请求对象直接从少数传递给任务,如下所示:

def tag_location(request):
    tasks.location.delay(request)
    return JsonResponse({'response': 1})

我收到一个错误,我猜它不能被序列化?我该如何解决?麻烦的是我也有文件上传对象..它不都是简单的数据类型。

最佳答案

因为请求对象包含对序列化不实际的东西的引用——比如上传的文件,或者与请求关联的套接字——所以没有通用的方法来序列化它。

相反,您应该只拉出并传递您需要的部分。例如,像这样的东西:

import tempfile

@app.task
def location(user_id, uploaded_file_path):
    # … do stuff …

def tag_location(request):
    with tempfile.NamedTemporaryFile(delete=False) as f:
        for chunk in request.FILES["some_file"].chunks():
            f.write(chunk)
    tasks.location.delay(request.user.id, f.name)
    return JsonResponse({'response': 1})

关于python - 将 Django 请求对象传递给 celery 任务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31304095/

相关文章:

python - 带有 Tensorboard 投影仪的 UMAP

python - Python 中的 GetSetDescriptorType 是什么?

python - 在 Python 中拟合麦克斯韦-玻尔兹曼分布

python - 如何从 django 中的 html 表单中获取选择字段文本?

python - 如果未指定,默认的 Celery 日志级别是多少?

python - 使用scrapy时如何绕过 'cookiewall'?

python - django-filter:如何连接列

python - 使用请求和 session 正确验证 API 调用

amazon-s3 - 如何在 S3 上构建一个守护进程来编码视频文件?

python - celery + RabbitMQ + "A socket error ocurred"