我的目标是使用通过Django表单上传的Celery处理一个大的CSV文件。当文件大小小于SETTINGS.FILE_UPLOAD_MAX_MEMORY_SIZE
时,我可以将表单的cleaned_data
变量传递给一个芹菜任务,并使用读取该文件
@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
堆栈跟踪显示pickle期间发生的错误:
return dumper(obj, protocol=pickle_protocol)
当从临时文件中读取上传的文件时,pickle似乎失败了。
这个问题的简单解决方案是增加FILE_UPLOAD_MAX_MEMORY_SIZE
。然而,我很好奇是否有更好的方法来处理这个问题?
将其保存到一个临时文件中,并将文件名传递给cerele。处理后删除。