【发布时间】:2016-11-06 06:52:41
【问题描述】:
我正在尝试使用 Celery + Redis + Flask 运行一些后台作业。
我的应用结构是:
myapp/
celery_worker.py
manage.py
myapp/
__init__.py
app.py
bot/
__init__.py
tasks.py
accounts/
views.py
我将 celery 初始化为 app.py 为:
celery = Celery('tasks', include=['bot.tasks'])
def create_app(config=None, app_name=None, blueprints=None):
# more Celery and other config here like celery.conf.update()
然后通过celery_worker.py启动worker
from myapp import create_app, celery
app = create_app()
app.app_context().push()
tasks.py 包含
from myapp import celery
@celery.task(name='my_task_bot')
def my_task_bot():
# pass
现在,当我尝试通过以下导入将任务从 tasks.py 访问到 accounts/views.py 时:
from ..bot.tasks import my_task_bot
我收到ImportError: cannot import name celery 错误。
无论我在哪里尝试导入任务,我都会收到此错误。这个celery 实例似乎是在 app.py 中初始化的实例,但没有被导入。
PS:我遵循https://github.com/ezequielo/flask_celery_exp repo 的模式,它工作正常。但不是我的应用。
编辑:
这是回溯:
Traceback (most recent call last):
File "manage.py", line 8, in <module>
from myapp import create_app
File "/home/mars/myapp/myapp/__init__.py", line 3, in <module>
from app import create_app, celery
File "/home/mars/myapp/myapp/app.py", line 18, in <module>
from .accounts import (accounts, AccountsAdmin)
File "/home/mars/myapp/myapp/accounts/__init__.py", line 7, in <module>
from .views import accounts
File "/home/mars/myapp/myapp/accounts/views.py", line 6, in <module>
from ..bot.tasks import my_task_bot
File "/home/mars/myapp/myapp/bot/tasks.py", line 14, in <module>
from myapp import celery
ImportError: cannot import name celery
Fatal error: local() encountered an error (return code 1) while executing 'python manage.py initdb'
我在尝试启动 manage.py 或 celery_worker 时遇到上述错误。
请提出建议。
【问题讨论】: