2012-06-27 104 views
1

我試圖創建一個套接字應用程序,使用python的smptd和asyncore庫監聽端口25中的傳入電子郵件,應用程序應該有權訪問Django ORM以採取必要的措施。Daemonize Django管理命令

我到目前爲止的做法是創建一個直接訪問Django數據庫的python腳本,並在supervisor下運行它,但這不是一個好的解決方案。合適的人將有一個管理命令或類似任務隊列(芹菜)。

如果我創建一個Django管理命令來運行這個長時間運行的套接字應用程序,我可以將它附加到主管?我需要守護它嗎?有什麼區別,我該如何守護它?我找到了django.utils.daemonize,但沒有找到任何關於它的文檔。

用芹菜解決它會更合適嗎?我的應用程序監聽一個套接字,而在我的理解中,Celery等待觸發器,但是我沒有發現任何Celery中長時間運行的任務的示例,當celeryd啓動時它會自動啓動。

回答

3

爲了您的任務使用python + supervisord是我認爲的最佳解決方案。因爲Celery的目標是執行任務,並運行計劃任務。 當您的腳本爲Celery創建任務時,有退出方式,它將提供更好的性能。但是,只有在需要運行計劃後臺任務時,或者在守護進程中有長時間執行的任務時,才應該使用芹菜。

+0

沒錯。 Supervisord對於一個manage.py命令來說是最好的選擇 – Hanynowsky

0

作爲管理命令的替代解決方案,我建議您讓電子郵件服務器調用Django提供的Web服務。

這有幾個好處

  • 從Django中的郵件服務器被解耦合,所以你可以把它們放在如果你想不同的服務器
  • 你唯一需要的守護程序是郵件程序
  • 無需芹菜 - Django不需要關心任何觸發,因爲Django組件是被動的