Django应用程序尚未加载Celery任务

Pro*_*eus 4 python django celery

下面给出错误的是什么?我不确定这是我安装的应用程序或我的应用程序的问题.以下例外仅在运行Celery时生成,即celery -A demo.apps.wall.tasks workerrunserver不会生成任何错误.哪个应用程序问题?

Traceback (most recent call last):
  File "/Users/user/Documents/workspace/demo-api/env/bin/celery", line 11, in <module>
    sys.exit(main())
  File "/Users/user/Documents/workspace/demo-api/env/lib/python3.5/site-packages/celery/__main__.py", line 30, in main
    main()
  File "/Users/user/Documents/workspace/demo-api/env/lib/python3.5/site-packages/celery/bin/celery.py", line 81, in main
    cmd.execute_from_commandline(argv)
  File "/Users/user/Documents/workspace/demo-api/env/lib/python3.5/site-packages/celery/bin/celery.py", line 770, in execute_from_commandline
    super(CeleryCommand, self).execute_from_commandline(argv)))
  File "/Users/user/Documents/workspace/demo-api/env/lib/python3.5/site-packages/celery/bin/base.py", line 309, in execute_from_commandline
    argv = self.setup_app_from_commandline(argv)
  File "/Users/user/Documents/workspace/demo-api/env/lib/python3.5/site-packages/celery/bin/base.py", line 469, in setup_app_from_commandline
    self.app = self.find_app(app)
  File "/Users/user/Documents/workspace/demo-api/env/lib/python3.5/site-packages/celery/bin/base.py", line 489, in find_app
    return find_app(app, symbol_by_name=self.symbol_by_name)
  File "/Users/user/Documents/workspace/demo-api/env/lib/python3.5/site-packages/celery/app/utils.py", line 238, in find_app
    sym = imp(app)
  File "/Users/user/Documents/workspace/demo-api/env/lib/python3.5/site-packages/celery/utils/imports.py", line 101, in import_from_cwd
    return imp(module, package=package)
  File "/Users/user/Documents/workspace/demo-api/env/lib/python3.5/importlib/__init__.py", line 126, in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
  File "<frozen importlib._bootstrap>", line 986, in _gcd_import
  File "<frozen importlib._bootstrap>", line 969, in _find_and_load
  File "<frozen importlib._bootstrap>", line 958, in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 673, in _load_unlocked
  File "<frozen importlib._bootstrap_external>", line 662, in exec_module
  File "<frozen importlib._bootstrap>", line 222, in _call_with_frames_removed
  File "/Users/user/Documents/workspace/demo-api/demo/apps/Walls/tasks.py", line 14, in <module>
    from demo.apps.Walls.redis_models import WallSchedule, WallBroadcast, UserWalls
  File "/Users/user/Documents/workspace/demo-api/demo/apps/Walls/redis_models.py", line 12, in <module>
    from demo.apps.memberships.models import Membership
  File "/Users/user/Documents/workspace/demo-api/demo/apps/memberships/models.py", line 4, in <module>
    from django.contrib.contenttypes.models import ContentType
  File "/Users/user/Documents/workspace/demo-api/env/lib/python3.5/site-packages/django/contrib/contenttypes/models.py", line 161, in <module>
    class ContentType(models.Model):
  File "/Users/user/Documents/workspace/demo-api/env/lib/python3.5/site-packages/django/db/models/base.py", line 94, in __new__
    app_config = apps.get_containing_app_config(module)
  File "/Users/user/Documents/workspace/demo-api/env/lib/python3.5/site-packages/django/apps/registry.py", line 239, in get_containing_app_config
    self.check_apps_ready()
  File "/Users/user/Documents/workspace/demo-api/env/lib/python3.5/site-packages/django/apps/registry.py", line 124, in check_apps_ready
    raise AppRegistryNotReady("Apps aren't loaded yet.")
django.core.exceptions.AppRegistryNotReady: Apps aren't loaded yet.
Run Code Online (Sandbox Code Playgroud)

跑步manage.py check还可以.

bor*_*ast 12

尝试将此添加到开头tasks.py:

import django
django.setup()
Run Code Online (Sandbox Code Playgroud)

  • celery.py模块不应该调用`django.setup(),它在工作者启动时由"django fixups"处理. (2认同)
  • 升级到Celery 4和Django 1.10之后,我只能通过使用它来重新启动任务. (2认同)
  • 这不适合我.这只会导致错误`RuntimeError:populate()不可重入 (2认同)
  • 升级到 Celery 4 后它工作了,但我不得不在 celery.py 中调用 `django.setup()`,而不是在 tasks.py 中。 (2认同)

Jen*_*rup 4

好的 - 在发布你的 celery 应用程序文件后,我与我拥有的文件进行了比较并尝试运行。我想我找到了你的问题 - 看起来你正在调用tasks.py in celery -A demo.apps.wall.tasks

如果您的墙壁模块包含 celery.py 和tasks.py - 您应该调用celery -A demo.apps.wall.

这是我的目录结构以及我运行的 celery 命令:

django_project
- an_app
- celery_tasks
   - init.py
   - celery_app.py (celery.py in your case)
   - tasks.py
Run Code Online (Sandbox Code Playgroud)

我运行的命令:celery worker -A celery_tasks从 django_project 目录。