0

第一次试用 Django Celery,这是 Django 和 Celery 的新手。

以下是我到目前为止尝试的内容,但出现以下错误...

/contacts/upload 处的 RuntimeError 超出最大递归深度

我正在使用 SQS 和消息代理。

设置.py

# Celery

import djcelery
djcelery.setup_loader()

INSTALLED_APPS += (
    'south',
    'userena',
    'social_auth',
    'djcelery',


)

BROKER_TRANSPORT = 'sqs'
BROKER_TRANSPORT_OPTIONS = {
    'region': 'eu-west-1',
    }
BROKER_USER = 'xyz'
BROKER_PASSWORD = 'zyx'

任务.py

@task
def upload(request, **kwargs):
    file = request.FILES['file']
    ContactCSVModel.import_from_file(file)
    return True

视图.py

@login_required
def upload(request):

            result = upload(request)
            if result:
                messages.add_message(request, messages.SUCCESS, 'Items have been added to the database.')
        else:

         etc

有人可以帮我理解我在这里做错了什么。谢谢你。

4

2 回答 2

2

你的任务和你的视图被称为完全相同的东西。

所以当你这样做时:

result = upload(request)

你并没有像我想的那样调用你的任务,而是再次调用你的视图函数。然后再次。然后再次。然后再次。

尝试将您的视图 def 更改为:

def upload_file(request):

应该可以解决问题。

于 2013-03-14T16:58:25.357 回答
1

重命名您的任务:

@task
def upload_task():
    ...

def upload(request):
    result = upload_task(request)

如果视图和任务具有相同的名称,则在上传视图内部,当调用上传时,上传是上传视图本身。

于 2013-03-14T17:00:20.917 回答