簡體   English   中英

將 django 請求對象傳遞給 celery 任務

[英]passing django request object to celery task

我在 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})

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM