python - celery - 导入错误 : No module named tasks

标签 python flask celery

我想在 Flask 中使用 Celery。这是我的目录列表:-

c26_calendar
|-- c26_calendar
|   |-- celery_config.py
|   |-- __init__.py
|   |-- settings.py
|-- manage.py
|-- modules
|   |-- __init__.py
|   |-- __init__.pyc
|   |-- messages
|   |   |-- __init__.py
|   |   |-- models.py
|   |   |-- views.py
|   |   |-- tasks.py
|   |-- tasks
|   |   |-- __init__.py
|   |   |-- models.py
|   |   |-- views.py
|   `-- user
|       |-- fb_keys.json
|       |-- fb.py
|       |-- helpers.py
|       |-- __init__.py
|       |-- models.py
|       |-- tasks.py
|       |-- views.py
|-- __init__.py

我的c26_calendar/c26_calendar/__init__.py

from celery import Celery
from flask import Flask
from flask.ext.mongoengine import MongoEngine

app = Flask(__name__, static_url_path='')
app.config["MONGODB_SETTINGS"] = {'DB': "calendar"}
app.config["SECRET_KEY"] = ""

celery = Celery('c26_calendar')
celery.config_from_object('c26_calendar.celery_config')

db = MongoEngine(app)


def register_blueprints(app):
    from modules.user.views import user
    from modules.messages.views import messages
    from modules.tasks.views import tasks

    app.register_blueprint(user)
    app.register_blueprint(messages)
    app.register_blueprint(tasks)

register_blueprints(app)


if __name__ == '__main__':
    app.run()

我的c26_calendar/celery_config.py

CELERY_BROKER_URL = 'redis://localhost:6379/0'
CELERY_RESULT_BACKEND = 'redis://localhost:6379/0'
CELERY_TASK_SERIALIZER = 'json'
CELERY_RESULT_SERIALIZER = 'json'
CELERY_ACCEPT_CONTENT = ['json']
CELERY_TIMEZONE = 'Europe/Oslo'
CELERY_ENABLE_UTC = True
CELERY_IMPORTS = ('tasks')
CELERY_CREATE_MISSING_QUEUES = True
CELERY_DEFAULT_RATE_LIMIT = '10/m'
CELERYD_MAX_TASKS_PER_CHILD = 10

PS:有一个名为 tasks 的模块,与 celery 任务无关。

我想包含每个模块的所有任务。我从根应用程序目录中运行了以下命令,即

celery -A c26_calendar.celery worker

它抛出一个错误,指出ImportError:没有名为任务的模块。以下是堆栈跟踪:-

Traceback (most recent call last):
  File "/usr/local/bin/celery", line 11, in <module>
    sys.exit(main())
  File "/usr/local/lib/python2.7/dist-packages/celery/__main__.py", line 30, in main
    main()
  File "/usr/local/lib/python2.7/dist-packages/celery/bin/celery.py", line 81, in main
    cmd.execute_from_commandline(argv)
  File "/usr/local/lib/python2.7/dist-packages/celery/bin/celery.py", line 769, in execute_from_commandline
    super(CeleryCommand, self).execute_from_commandline(argv)))
  File "/usr/local/lib/python2.7/dist-packages/celery/bin/base.py", line 311, in execute_from_commandline
    return self.handle_argv(self.prog_name, argv[1:])
  File "/usr/local/lib/python2.7/dist-packages/celery/bin/celery.py", line 761, in handle_argv
    return self.execute(command, argv)
  File "/usr/local/lib/python2.7/dist-packages/celery/bin/celery.py", line 693, in execute
    ).run_from_argv(self.prog_name, argv[1:], command=argv[0])
  File "/usr/local/lib/python2.7/dist-packages/celery/bin/worker.py", line 179, in run_from_argv
    return self(*args, **options)
  File "/usr/local/lib/python2.7/dist-packages/celery/bin/base.py", line 274, in __call__
    ret = self.run(*args, **kwargs)
  File "/usr/local/lib/python2.7/dist-packages/celery/bin/worker.py", line 212, in run
    state_db=self.node_format(state_db, hostname), **kwargs
  File "/usr/local/lib/python2.7/dist-packages/celery/worker/__init__.py", line 95, in __init__
    self.app.loader.init_worker()
  File "/usr/local/lib/python2.7/dist-packages/celery/loaders/base.py", line 128, in init_worker
    self.import_default_modules()
  File "/usr/local/lib/python2.7/dist-packages/celery/loaders/base.py", line 121, in import_default_modules
    tuple(maybe_list(self.app.conf.CELERY_INCLUDE))
  File "/usr/local/lib/python2.7/dist-packages/celery/loaders/base.py", line 103, in import_task_module
    return self.import_from_cwd(module)
  File "/usr/local/lib/python2.7/dist-packages/celery/loaders/base.py", line 112, in import_from_cwd
    package=package,
  File "/usr/local/lib/python2.7/dist-packages/celery/utils/imports.py", line 101, in import_from_cwd
    return imp(module, package=package)
  File "/usr/local/lib/python2.7/dist-packages/celery/loaders/base.py", line 106, in import_module
    return importlib.import_module(module, package=package)
  File "/usr/lib/python2.7/importlib/__init__.py", line 37, in import_module
    __import__(name)

我做错了什么?如何运行 celery ?

最佳答案

您的基本路径是/path/to/c26_calendar/。每个路径必须相对于基本路径。

而不是

CELERY_IMPORTS = ('tasks')

使用

CELERY_IMPORTS = ('modules/tasks',)

关于python - celery - 导入错误 : No module named tasks,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33868145/

相关文章:

python - Flask 部署在 ec2 Amazon aws 上

python - "from flask import request"与 "import requests"相同吗?

python - 在具有单个 CPU 的机器上的单个 celery worker 中运行多个进程

deployment - 使用 Airflow 进行零停机部署

python - 通过 Python/Linux 设置时间和日期

python - Django 请求仅显示第一个结果

python - 使用 Python Lambda 的(键,值)对

python - 使用 Flask-SocketIO 自定义握手数据

java - 在 jython jar 中导入 Flask 模块

django - 从 celery_beat 中删除项目不会将它们从数据库计划中删除