celery与django的连接问题
2025-06-06 14:05:56

在使用celery作为异步任务队列时,我遇到了Django连接不上的问题。具体来说,我已经按照网上的教程在Django的settings.py里配置好了celery的设置,写好了celery.pytasks.py,使用docker启动celery服务时,也正常显示celery连接到了redis,但是当django调用celery的task时,却抛出了连接异常的错误。

后来,在网上看了很多错误报告的解决方式之后,我发现是因为在Django里使用celery,还需要在django的__init__.py里进行如下配置:

1
2
from myapp.celery import app as celery_app
__all__ = ('celery_app',)

这样才能保证在Django启动时celery能够正确被加载。借此来复习一下Python中__init__文件的用法。

__init__.py

__init__.py 是 Python 包(package)的初始化文件,它的主要作用包括:

  • 标记目录为 Python 包:使 Python 将该目录视为一个可导入的包(即使文件为空)。
  • 初始化包级别的代码:当该包或其子模块被导入时,__init__.py 中的代码会自动执行
  • 控制模块的导入行为:可以定义 __all__ 来限制 from package import * 时导入的内容。

在 Django 项目的 __init__.py 中添加:

1
from myapp.celery import app as celery_app

可以确保 Celery 应用 (celery_app) 在 Django 启动时就被加载。