0

django管理コマンドの理解に少し問題があります。私はeth0を通していくつかのネットワークトラフィック情報を表示するWebアプリケーションを持っています。したがって私は、トラフィックを分析し、データベース内の特定のデータを作成/更新するPythonクラスを作成しました。このような何か:Djangoタスク/コマンド実行のベストプラクティス/理解

class Analyzer: 
    def doSomething(self): 
     #analyze the traffic create/update data in db 
    def startAnalyzing(self): 
     while 1: 
       self.doSomething() 

そこで私は、このクラスのインスタンスを作成し、startAnalyzing()を実行する管理コマンドを作成します。

今、私の質問:タスクが終了しない(全体の時間を実行する)と、webアプリケーションを経由して停止/開始されていないため、

は、管理コマンドの上にあることを行うための正しい方法このですか?または正しい方法は何ですか?

"Analyzer"をdjango経由で起動する方が良いでしょうか?私はdjangoに新しいし、それは正しい方法を行うwan't。

私は実行時にトラフィックを盗聴することは可能ですか:manage.py runserver 0.0.0.0:8080?

事前に感謝します。

答えて

0

あなたがやっていることは、管理コマンドとは関係ありません。実際には、管理コマンドはその名前が意味するものであり、何かを管理するコマンドであり、すばやく動作します。 Webアプリケーションのライフタイム全体にわたってプロセス全体を実行し続けることはできません。

あなたが望むものを実現するには、単純なPythonスクリプトを作成し、それをプロセスマネージャ(スーパーバイザ?)と一緒に実行する必要があります。あなたはちょうど djangoスクリプトの冒頭にあるので、おそらくあなたがDjangoを選んだのはDjangoのORMにアクセスすることができます。

は、したがって、すべてのすべてで、あなたはスクリプトは、次のようになりますよ:あなたは、通常のDjangoアプリケーションで使用するようDjangoのORMを使用することができます

import sys, os 
sys.path.insert(0, "/path/to/parent/of/project") # /home/projects/django-proj 

os.environ.setdefault("DJANGO_SETTINGS_MODULE", 'proj.settings') 

import django 
django.setup() 

from proj.app.models import DBModel 

この方法です。通常と同様に、データベースのテンプレートとビューを提供することもできます。

残っているのは、スクリプトを実行し続けることだけです。supervisordで簡単に実行できます。

+0

ありがとうございます。私は監督者を見てあなたが説明したようにします。 – elchapo

関連する問題