问题描述
我创建了一个简短的 Python 脚本来启动当前 Django 的 Celery 工作线程:
from celery.bin import worker
worker.worker(app=my_app).run()
这很好用,并且使用了所有正确的设置,因此无需指定 celery
的无数命令行参数(我可以通过 debugpy 启动它并从容器远程调试它在 VS 代码中)。
我的问题是是否可以运行 manage.py
命令来实现相同的目的?
(注意:使用 Celery 4.3 和 Django 2.2)
解决方法
应用程序可以使用 manage.py
注册自己的操作。例如,您可能想要为正在分发的 Django 应用添加 manage.py
操作。
为此,向应用程序添加管理/命令目录。 Django 将为该目录中名称不以下划线开头的每个 Python 模块注册一个 manage.py
命令。例如:
YOUR_APP/
__init__.py
models.py
management/
__init__.py
commands/
__init__.py
runcelery.py
tests.py
views.py
在此示例中,runcelery 命令将可用于在 INSTALLED_APPS 中包含 YOUR_APP 应用程序的任何项目。
runcelery.py
模块只有一个要求——它必须定义一个类 Command 来扩展 BaseCommand 或其子类之一。
要实现该命令,请编辑 YOUR_APP/management/commands/runcelery.py
如下所示:
from django.core.management.base import BaseCommand,CommandError
from celery.bin import worker
class Command(BaseCommand):
help = 'Run celery worker'
def handle(self,*args,**options):
worker.worker(app=my_app).run()
您现在可以像这样从 manage.py 运行它:python manage.py runcelery
查看此 article 了解更多信息。