我有一个简单的视图,它将 CSV 数据上传到映射模型并填充数据。这很完美,但现在我想集成Celery,我真的很难让以下任务正常工作。我正在尝试 Celery 与 Django 和Amazon SQS。
这是我view.py
运行任务的主要部分:
def upload(request):
# If we had a POST then get the request post values.
if request.method == 'POST':
form = ContactUploadForm(request.POST, request.FILES)
# Check we have valid data
if form.is_valid():
filename = handle_uploaded_file(request.FILES['file'])
import_csv.delay(filename)
def handle_uploaded_file(f):
with open('name.csv', 'wb+') as destination:
for chunk in f.chunks():
destination.write(chunk)
这是我第一次尝试 task.py
@task
def import_csv(filename):
ContactCSVModel.import_from_file(filename)
这在芹菜日志中给出了错误:AttributeError: 'NoneType' object has no attribute 'seek'
我认为我的第二次尝试行不通,因为它实际上试图将文件上传到 SQS 并给出SQSError: 413 Request Entity Too Large
. 我假设这根本不是我想要做的,它是一项任务,我不想将文件上传到 SQS。
在 task.py 的第二次尝试
@task
def import_csv(filename):
ContactCSVModel.import_data(data = open(filename))
第 3 次尝试在 task.py 中传递请求
@task
def import_csv(request):
filename = handle_uploaded_file(request.FILES['file'])
ContactCSVModel.import_data(data = open(filename))
这给出了错误**Can't pickle <type 'cStringIO.StringO'>: attribute lookup cStringIO.StringO failed**
我怎样才能完成这项任务?我确信这很简单:) 正如你所看到的,我在上面尝试了一些不同的方法来创建这个任务。