我的目标是使用Celery处理通过Django表单上传的大型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
堆栈跟踪显示了在pickle过程中发生错误的位置:
return dumper(obj, protocol=pickle_protocol)
看起来,当从临时文件中读取上传的文件时,pickle会失败。
解决这个问题的简单方法是增加FILE_UPLOAD_MAX_MEMORY_SIZE
。但是,我想知道是否有更好的方法来管理这个问题?