我最近一直在玩django和芹菜。开发过程中一件烦人的事情就是我每次修改任务时都必须重启celery守护进程。当我正在开发时,我通常喜欢使用'manage.py runserver',它会在修改我的应用程序时自动重新加载django框架。
有没有办法在runserver执行的重新加载过程中添加一个钩子,以便它自动重启我运行的celery守护进程?
或者,芹菜是否有类似的监视和重载加载模式,我应该用于开发?
答案 0 :(得分:4)
Django-supervisor非常适合这个目的。您可以让它启动Django服务器,Celery以及您需要的任何其他东西,并为开发和生产服务器提供不同的配置。它还知道在代码更改时重新加载celery守护程序。 https://github.com/rfk/django-supervisor
答案 1 :(得分:2)
我相信您可以将CELERY_ALWAYS_EAGER
设置为true
。
答案 2 :(得分:1)
Celery在代码更改时没有任何重装代码或自动重启功能,而不必手动重启。
没有添加钩子的方法,我认为编辑django的源代码只是为了执行重启而不值得。 就个人而言,我正在开发中,我更愿意看到芹菜的输出外壳用颜色而不是尾部装饰日志,更具可读性。
答案 3 :(得分:1)
Celery 2.5具有实验性运行时选项--autoreload,也可用于此目的。以下是release notes中的更多详细信息。话虽如此,我认为django-supervisor(来自@Lee Semel)看起来更像是做事的方式。我想我会在这里发布这个替代方案,以防其他读者不想为异步处理配置另一个应用程序。
答案 4 :(得分:1)
是。 Django提供自动重载挂钩,可用于重启其他脚本。
这是一个简单的管理命令,可以在重新加载时打印消息
import subprocess
from django.core.management.base import BaseCommand
from django.utils import autoreload
def reload():
print('Code changed. Auto reloading...')
class Command(BaseCommand):
def handle(self, *args, **options):
autoreload.main(reload)
现在您可以保存到reload.py并使用python manage.py reload
运行它。对reload celery workers is available here的管理命令。