【问题标题】:Django Celery maximum recursion depth exceede超过 Django Celery 最大递归深度
【发布时间】:2013-03-03 04:01:35
【问题描述】:

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

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

/contacts/upload 处的运行时错误 超出最大递归深度

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

settings.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'

tasks.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

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

【问题讨论】:

    标签: django django-views django-celery


    【解决方案1】:

    重命名你的任务:

    @task
    def upload_task():
        ...
    
    def upload(request):
        result = upload_task(request)
    

    如果视图和任务同名,则在上传视图中,当调用上传时,上传是上传视图本身。

    【讨论】:

      【解决方案2】:

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

      所以当你这样做时:

      result = upload(request)
      

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

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

      def upload_file(request):
      

      应该可以解决问题。

      【讨论】:

        猜你喜欢
        • 2019-01-18
        • 2017-08-09
        • 2011-03-31
        • 2012-06-09
        • 1970-01-01
        • 1970-01-01
        • 2013-02-20
        • 2017-11-05
        • 2013-11-30
        相关资源
        最近更新 更多