我正在尝试使用 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
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
error.
无论我在哪里尝试导入任务,都会收到此错误。这celery
实例似乎是在 app.py 中初始化的实例,但未导入。
PS:我遵循的模式https://github.com/ezequielo/flask_celery_exp https://github.com/ezequielo/flask_celery_exp回购并且工作正常。但不是我的应用程序。
Edit:
这是回溯:
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
or celery_worker
.
请建议。