2011-03-01 52 views
7

我最近一直在玩django和芹菜。開發過程中一件令人討厭的事情是,我每次修改任務時都必須重新啓動芹菜守護進程。當我開發時,我通常喜歡使用'manage.py runserver',它會自動將django框架修改爲我的應用程序。django的runserver選項是否提供了用於運行其他重新啓動腳本的掛鉤?

有沒有辦法在runserver的重裝過程中添加一個鉤子,以便它自動重啓我正在運行的celery守護進程?

或者,芹菜是否有一個類似的應用於開發的監控和重新加載模式?

回答

4

Django-supervisor很適合這個用途。你可以讓它啓動Django服務器,Celery和其他你需要的東西,併爲開發和生產服務器配置不同的配置。它也知道當你的代碼改變時重新加載芹菜守護進程。 https://github.com/rfk/django-supervisor

1

Celery沒有任何重新加載代碼的功能,或者在代碼更改時自動重新啓動,而不必手動重新啓動它。

有沒有辦法添加一個鉤子,我認爲不值得編輯django的源代碼只是爲了執行重新啓動。 就我個人而言,當我開發我喜歡看顏色裝飾而不是尾巴日誌的芹菜輸出外殼,更具可讀性。

3

我相信你可以設置CELERY_ALWAYS_EAGERtrue

1

Celery 2.5有一個實驗運行時選項 - 也可用於此目的的自動裝載。這裏的release notes更詳細。話雖如此,我認爲django-supervisor(通過@Lee Semel)看起來是更好的做事方式。我想我會在這裏發佈這個替代方案,以防其他讀者不想爲另一個應用程序配置異步處理。

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