Miután egy bizonyos ideig senki kapcsolatos magukat a Django keretrendszer fogja feltenni a kérdést: Szeretem Django jelzéseire, valóban. De ha csak tudtam szállíthatja aszinkron. Tetszik, de más téma, vagy valami, én nem igazán tudom .... Van, hogy valahogy lehetséges?
Nos, most könnyedén megteheti, hogy a Django-signalqueue.
Nézd, én megmutatom neked. Először telepítse a Django-signalqueue:
$ Pip telepíteni Django-signalqueue # ez fogja telepíteni tornádó és Django-delegáltja ha szükséges
... Akkor is szeretné, ezek közül néhány opcionális csomagokat, ha nem kell őket már:
$ Sört telepíteni Redis yajl # s / főzési / apt-get / ízlés
$ Pip telepíteni Redis hiredis # ajánlott
$ Pip install ujson # ajánlott
$ Pip telepíteni czjson yajl simplejson # ezek működnek is
$ Pip telepíteni orr Django-orr # A tesztek
Add Django-signalqueue a INSTALLED_APPS, és a beállítások a program a sor, míg te a settings.py:
# Settings.py
INSTALLED_APPS = [
& Nbsp; "signalqueue", # ...
]
SQ_QUEUES = {
& Nbsp; "alapértelmezett": {# szüksége van legalább egy dict nevű "alapértelmezett" a SQ_QUEUES
& Nbsp; "NÉV": "signalqueue_default", # opcionális - alapban signalqueue_default "
& Nbsp; "motor": "signalqueue.worker.backends.RedisSetQueue", # szükség - ez a queue sofőrje
& Nbsp; "" periódus: 30, # 1/3 sec
& Nbsp; "Beállítások": dict (),
& Nbsp;},
}
SQ_RUNMODE = 'SQ_ASYNC_REQUEST "# felhasználása aszinkron feladás alapértelmezett
SQ_WORKER_PORT = 11231 # a port a sorban munkavégző folyamat fog kötődni,
Mindemellett a csak kell egy hívást, hogy signalqueue.autodiscover () a gyökér URLConf:
# Urls.py
import signalqueue
signalqueue.autodiscover ()
Megadhatjuk aszinkron jeleket!
Aszinkron jelek előfordulását signalqueue.dispatch.AsyncSignal, hogy már definiált az alábbi helyeken:
- Your_app / signals.py (nem baj, ha már használja ezt a fájlt, ahogy ezt sokan teszik)
- Modules megnevezett egy settings.SQ_ADDITIONAL_SIGNALS listán, vagy tuple
- Hamarosan: signalqueue.register () - így tudod őket sehol máshol.
AsyncSignals meghatározása ugyanúgy, mint a jól ismert példánya django.dispatch.Signal ismer és szeret:
# Yourapp / signals.py
a signalqueue.dispatch import AsyncSignal
a signalqueue.mappings importálni ModelInstanceMap
# A két konstruktőri ugyanezt csinálja
my_signal = AsyncSignal (providing_args = ['instance "]) # A Yuge
my_other_signal = AsyncSignal (providing_args = {"például": ModelInstanceMap}) # a leképezés
# Következőkben lehet menni sehova - csak a példányokat kell lennie yourapp / signals.py:
def callback (küldő, ** kwargs):
& Nbsp; print "I,% s, már jön feladták aszinkron% s, köszönhetően django-signalqueue." % (
& Nbsp; str (kwargs ['instance "]),
& Nbsp; feladó .__ name__)
my_signal.connect (callback)
... A fő különbség a második definíció, amely meghatározza providing_args mint dict feltérképezésével osztályok helyett sima lista. Majd magyarázni feltérképezése osztályok később, de ha megy Django modell esetekben a jelek, akkor nem kell aggódni emiatt.
Miután a munkavállaló fut, akkor küldje el a jelet a sorban, például így:
>>> My_signal.send (feladó = AModelClass, például = a_model_instance)
A tüzet a jelet, mint egy normál Django jelet, akkor ezt:
>>> My_signal.send_now (feladó = AModelClass, például = a_model_instance)
Tune holnap a lenyűgöző megkötése ... A Django-signalqueue README !!!!!!
követelmények :
- Python
- Django
Hozzászólás nem található