celery

zbq4xfa0  于 2021-06-09  发布在  Redis
关注(0)|答案(1)|浏览(680)

的问题 upload_subscribers.delay 参数只能是整数或字符串,我将无法传递 request 或者 your_file 作为函数的参数。如何修复下面的代码,使其可以在celery中作为后台任务运行?

import pandas as pd
from .models import Subscriber

def upload_subscribers(request):
    template = "audiences/upload.html"
    if request.method == "POST":
        your_file = request.FILES['file']

        if your_file.name.endswith('.xlsx'):
            df = pd.read_excel(your_file)

            for index, row in df.iterrows():
                created = Subscriber.objects.update_or_create(
                    email= row[2],
                    defaults = {
                        "first_name": row[0],
                        "last_name": row[1],
                    })

    return None
mspsb9vt

mspsb9vt1#

有两种方法可以解决这个问题,
将文件的整个数据作为函数参数发送
将文件保存在磁盘、s3、数据库等存储系统中,将此文件位置发送到celery 任务。

data = ""
with open(your_file, "rb") as f:
    data = f.read()
upload_subscribers.delay( data )

相关问题