Celery - 导入错误:没有名为tasks的模块
我想在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
另外,有一个叫 tasks
的模块,但它和celery的任务没有关系。
我想把每个模块里的所有任务都包含进来。我在根应用目录下运行了以下命令,也就是:
celery -A c26_calendar.celery worker
结果出现了一个错误,提示 ImportError: No module named tasks
。下面是错误的详细信息:
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呢?
相关文章:
- 暂无相关问题
1 个回答
2
你的基础路径是 /path/to/c26_calendar/
。所有的路径都必须相对于这个基础路径。
不要使用
CELERY_IMPORTS = ('tasks')
而是要使用
CELERY_IMPORTS = ('modules/tasks',)