2012-03-25 95 views
0

私のDjangoのアプリはurls.pyに次のコードによって起動されたループが含まれています。ビューでこの変数の値に変更したいのですが、動作しないようです。 views.pyからDjangoのビューがグローバル変数を変更

import global_vars 

def my_view(request): 
    global_vars.myvar = 2 
    return httpResponse... 

どのようにループ内の関数は、このビューが呼び出されていることを知らせることができますか?

ループはリモートからの信号をリッスンし、ボタンの押下に基づいてデータをデータベースに保存することができます。 Webインターフェイスには、リモコンの設定を変更するビューがいくつかあります。これらの設定が変更されている間、ループ内の状態はデータが保存されないようにする必要があります。

+2

Djangoアプリケーションでグローバル変数を使用して状態を保持することは決してありません。彼らが働かないようにするにはあまりにも多くの方法があります。 –

答えて

2

私はイグナシオバスケス - エイブラムスに同意し、グローバルを使用しないでください。 特にあなたのユースケースでは。このアプローチの問題は、アプリケーションをwsgiコンテナにデプロイするときや、複数のインスタンスを異なるプロセスで実行させるときに、1つのプロセスでグローバル変数を変更しても他のプロセスでそれが変更されないということです。

スレッドを使用することもお勧めしません。非同期的にタスクを処理する長期実行プロセスが必要な場合は、セロリー(http://celeryproject.org/)を参照してください。それは本当に良いです。

+0

説明をありがとう。この場合、私は1人の労働者しか立ち上げないようにuwsgiを設定しました。このアプリケーションはローカルセットアップのためのものであり、おそらく複数のクライアントが同時に接続されることはありません。私はCeleryで簡単に見ましたが、シリアルポートを監視するデーモンと一緒に使用する方法はわかりませんでした。 – AgDude