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

view.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 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 に答える