一定の時間が経過した後Djangoフレームワークで自分自身に関わる誰もが質問をしようとしている:私はDjangoの信号を愛し、確かに。しかし、唯一の場合、私は非同期的にそれらを派遣できた。同様に、いくつかの他のスレッドか何かで、私は本当に知らない....ことは何とか可能ですか?
さて、今、あなたは簡単にジャンゴ·signalqueueでそれを行うことができます。
ウォッチは、私はあなたが表示されます。まず、ジャンゴ·signalqueueをインストールします。
必要であれば、これは竜巻とDjango-デリゲートをインストールしますジャンゴ - signalqueue#を$ピップをインストール
あなたは既にそれらを持っていない場合は...あなたはまた、これらのオプションパッケージのいくつかをすることもできます。
$醸造はRedisのyajl#のS / BREWをインストール/味に/ apt-getを
RedisのをインストールPIP $が#おすすめhiredis
$#ujsonを推奨インストールピップ
$ピップはあまりにczjson yajlのsimplejson#これらの作業をインストール
$がテストのために鼻ジャンゴ·鼻#をインストールピップ
あなたのsettings.pyにいる間、あなたのINSTALLED_APPS、およびキューの設定にジャンゴ·signalqueueを追加します。
#のsettings.py
INSTALLED_APPS = [
  'signalqueue」、#...
]
SQ_QUEUESの= {
  'デフォルト':{#あなたがSQ_QUEUESに「デフォルト」という名前の少なくとも一つの辞書が必要です
  'NAME': 'signalqueue_default」、オプションの# - ' signalqueue_default」にデフォルト設定
  'ENGINE': 'signalqueue.worker.backends.RedisSetQueue」、必要な# - これはあなたのキューのドライバです
  'INTERVAL':30、#1/3秒
  'オプション':dictの()、
 }、
}
デフォルトでSQ_RUNMODE = 'SQ_ASYNC_REQUEST'#用非同期派遣
SQ_WORKER_PORT = 11231#あなたのキューワーカープロセスがバインドするポート
すべてのことに加えて、あなたは自分のルートのURLconfに()signalqueue.autodiscoverへの呼び出しが必要です:
#のurls.py
輸入signalqueue
signalqueue.autodiscover()
のあなたは、非同期信号を定義することができます!の
非同期信号を使用すると、次のいずれかの場所で定義されてきたsignalqueue.dispatch.AsyncSignalのインスタンスである:
- your_app / signals.py(すでにこのファイルを使用する場合、多くがそうであるようにそれは、大丈夫です)
- settings.SQ_ADDITIONAL_SIGNALSリストやタプルで命名モジュール
- 公開間近:signalqueue.registerを() - ので、あなたがどこか他のそれらを置くことができます。
AsyncSignalsはあまり馴染みのdjango.dispatch.Signalのインスタンスあなたが知っていると愛のように定義されています。
#yourapp / signals.py
signalqueue.dispatch輸入AsyncSignalから
signalqueue.mappingsからのインポートModelInstanceMap
#これらの二つのコンストラクタは、同じことを行う
my_signal = AsyncSignal(providing_args = ['インスタンス'])#弓削
my_other_signal = AsyncSignal(providing_args = {'インスタンス':ModelInstanceMap})マッピングを持つ#
#以下は、どこにでも行くことができます - 唯一のインスタンスがyourapp / signals.pyにする必要があります。
DEFのコールバック(送信者、** kwargsから):
 プリント "私は、%sは、ここに感謝のジャンゴ - signalqueueをするために、%sによって非同期的に派遣されています。」 %(
  STR(kwargsから['インスタンス'])、
 送信者.__ name__)
my_signal.connect(コールバック)
...主な違いは、代わりにプレーンなリストのマッピングクラスを持つ辞書としてproviding_argsを指定する第2の定義、である。私たちは、後でマッピングクラスを説明しますが、あなたはあなたの信号にDjangoのモデルインスタンスを渡している場合は、このことを心配する必要はありません。
労働者が実行されると、あなたはとてもようなキューに信号を送ることができます。
>>> my_signal.send(送信者= AModelClass、インスタンス= a_model_instance)
通常のDjangoの信号のようなあなたの信号を発射するには、これを行うことができます:
>>> my_signal.send_now(送信者= AModelClass、インスタンス= a_model_instance)
-
の要件のためのラジオタウンで恋をして>パイソンます。
- ジャンゴます。
コメントが見つかりません