Django çerçeve soru sormak için gidiyor kendilerini ilgilendiren zaman herkes belirli bir miktar sonra: Ben gerçekten, Django'nın sinyallerini seviyorum. Ama eğer sadece ben uyumsuz olarak onları gönderebilir olabilir. Gibi diğer bazı parçacığı ya da bir şey, ben gerçekten bilmiyorum .... bu şekilde mümkün mü?
Eh, şimdi kolayca Django-signalqueue ile bunu yapabilirsiniz.
İzle, ben sana göstereceğim. İlk olarak, Django-signalqueue yükleyin:
$ Bu kuracaktır django-signalqueue # yüklemek pip kasırga ve django-delege gerekirse
Eğer onları zaten yoksa ... Ayrıca, bu isteğe bağlı paketlerin bazıları isteyebilirsiniz:
$ Demlemek redis # s / demlemek / apt-get / tadı yajl yüklemek
REDIS yüklemek pip $ # tavsiye hiredis
$ # Ujson tavsiye install pip
$ Çok czjson yajl simplejson # Bu çalışma yüklemek pip
$ Testler için burun django-burun # yüklemeniz pip
Eğer settings.py yaparken, sizin INSTALLED_APPS ve bir sıra için ayarlara Django-signalqueue ekle:
# Settings.py
INSTALLED_APPS = [
& Nbsp; 'signalqueue' # ...
]
SQ_QUEUES = {
& Nbsp; 'varsayılan': {# Eğer SQ_QUEUES içinde 'varsayılan' adlı en az bir dict gerekir
& Nbsp; 'İSMİ': 'signalqueue_default', isteğe bağlı # - 'signalqueue_default' varsayılan
& Nbsp; 'MOTOR': 'signalqueue.worker.backends.RedisSetQueue', gerekli # - Bu sıranın sürücü
& Nbsp; 'ARALIK': 30, # 1/3 sn
& Nbsp; 'SEÇENEKLER': dict (),
& Nbsp;},
}
Varsayılan olarak SQ_RUNMODE = 'SQ_ASYNC_REQUEST' # kullanımı uyumsuz sevk
SQ_WORKER_PORT = 11231 # senin kuyruk çalışan işlemin bağlanacak liman
Tüm bu yanında, sadece kök URLConf olarak () signalqueue.autodiscover çağrısı gerekir:
# Urls.py
ithalat signalqueue
signalqueue.autodiscover ()
Sen uyumsuz sinyalleri tanımlayabilirsiniz!
Asenkron sinyaller aşağıdaki yerlerden birinde tanımlanan ettik signalqueue.dispatch.AsyncSignal örnekleri şunlardır:
- Your_app / signals.py (zaten bu dosyayı kullanmak eğer iyi, gibi birçok yapmak)
- Bir settings.SQ_ADDITIONAL_SIGNALS liste veya başlığın adlı modüller
- Yakında: signalqueue.register () - böylece onları başka bir yerde koyabilirsiniz.
AsyncSignals çok tanıdık bildiğiniz django.dispatch.Signal örneklerini ve sevgi gibi tanımlanır:
# YourApp / signals.py
signalqueue.dispatch ithalat AsyncSignal gelen
signalqueue.mappings gelen ModelInstanceMap ithal
# Bu iki kurucular aynı şeyi yapmak
my_signal = AsyncSignal (providing_args = ['örnek']) Yuge #
my_other_signal = AsyncSignal (providing_args = {'örnek': ModelInstanceMap}) eşlemeleri ile #
# Ne şu yere gidebilir - Sadece örnekleri YourApp / signals.py olması gerekir:
def geri (gönderici, ** kwargs):
& Nbsp; print "Ben,% s, burada teşekkür django-signalqueue için,% s tarafından uyumsuz olarak gönderilen edilmiştir." (%
& Nbsp; str (kwargs ['örnek']),
& Nbsp; gönderen .__ name__)
my_signal.connect (geri)
... Temel fark haritalama sınıfları yerine düz bir liste ile bir dict providing_args belirten ikinci bir tanımdır. Biz daha sonra haritalama sınıfları anlatacağım, ama size sinyalleri Django modeli örnekleri geçiyoruz, bu konuda endişelenmenize gerek yok.
Işçi çalıştıran sonra, bunu gibi sıraya sinyal gönderebilir:
>>> My_signal.send (gönderici = AModelClass, örnek = a_model_instance)
Normal bir Django sinyali gibi sinyalini ateş, bunu yapabilirsiniz:
>>> My_signal.send_now (gönderici = AModelClass, örnek = a_model_instance)
Ve ... Django-signalqueue README şaşırtıcı sonuçlandırılması için yarın Dinle !!!!!!
Gereksinimler :
- Python
- Django
Yorum Bulunamadı