2

我的目标是使用通过 Django 表单上传的 Celery 处理大型 CSV 文件。当文件的大小小于SETTINGS.FILE_UPLOAD_MAX_MEMORY_SIZE时,我可以将表单的cleaned_data变量传递给 celery 任务并使用以下命令读取文件:

@task
def taskFunction(cleaned_data):
    for line in csv.reader(cleaned_data['upload_file']):
        MyModel.objects.create(field=line[0])

但是,当文件的大小大于上述设置时,我收到以下错误:

expected string or Unicode object, NoneType found

堆栈跟踪显示泡菜期间发生的错误:

return dumper(obj, protocol=pickle_protocol)

看来,当从临时文件中读取上传的文件时,pickle 失败了。

解决这个问题的简单方法是增加FILE_UPLOAD_MAX_MEMORY_SIZE. 但是,我很好奇是否有更好的方法来管理这个问题?

4

1 回答 1

0

将其保存到临时文件并将文件名传递给 celery。处理后删除。

于 2013-08-28T21:21:38.827 回答