Setelah sejumlah orang waktu mengaitkannya dengan kerangka Django akan mengajukan pertanyaan: Saya suka sinyal Django, memang. Tapi kalau saja aku bisa mengutus mereka asynchronous. Seperti, pada beberapa benang atau sesuatu yang lain, saya tidak benar-benar tahu .... Apakah yang entah bagaimana mungkin?
Nah, sekarang Anda dapat dengan mudah melakukannya dengan Django-signalqueue.
Watch, akan saya tunjukkan. Pertama, instal Django-signalqueue:
$ Pip install Django-signalqueue # ini akan menginstal tornado dan Django-delegasi jika perlu
... Anda mungkin juga ingin beberapa paket-paket opsional, jika Anda tidak memiliki mereka sudah:
$ Minuman menginstal Redis yajl # s / minuman / apt-get / secukupnya
$ Pip menginstal Redis hiredis # direkomendasikan
$ Pip install ujson # direkomendasikan
$ Pip install czjson yajl simplejson # pekerjaan ini juga
$ Pip menginstal hidung Django-hidung # untuk tes
Tambahkan Django-signalqueue ke INSTALLED_APPS Anda, dan pengaturan antrian, saat Anda berada di settings.py Anda:
# Settings.py
INSTALLED_APPS = [
& Nbsp; 'signalqueue', # ...
]
SQ_QUEUES = {
& Nbsp; 'default': {# Anda memerlukan setidaknya satu dict bernama 'default' di SQ_QUEUES
& Nbsp; 'NAMA': 'signalqueue_default', # opsional - default untuk 'signalqueue_default'
& Nbsp; 'ENGINE': 'signalqueue.worker.backends.RedisSetQueue', # diperlukan - ini adalah pengemudi antrian Anda
& Nbsp; 'INTERVAL': 30, # 1/3 sec
& Nbsp; 'PILIHAN': dict (),
& Nbsp;},
}
SQ_RUNMODE = 'SQ_ASYNC_REQUEST' # menggunakan async pengiriman secara default
SQ_WORKER_PORT = 11231 # port proses pekerja antrian Anda akan mengikat
Selain semua itu, Anda hanya perlu panggilan untuk signalqueue.autodiscover () dalam URLConf root anda:
# Urls.py
impor signalqueue
signalqueue.autodiscover ()
Anda dapat menentukan sinyal async!
Sinyal Asynchronous adalah contoh signalqueue.dispatch.AsyncSignal bahwa Anda telah didefinisikan dalam salah satu tempat berikut:
- Your_app / signals.py (tidak apa-apa jika Anda sudah menggunakan file ini, karena banyak melakukan)
- Modul yang disebutkan dalam daftar settings.SQ_ADDITIONAL_SIGNALS atau tuple
- Segera hadir: signalqueue.register () - sehingga Anda dapat menempatkan mereka di tempat lain.
AsyncSignals didefinisikan seperti contoh akrab django.dispatch.Signal Anda kenal dan cinta:
# Yourapp / signals.py
dari signalqueue.dispatch impor AsyncSignal
dari signalqueue.mappings impor ModelInstanceMap
# Dua konstruktor tersebut melakukan hal yang sama
my_signal = AsyncSignal (providing_args = ['instance']) # Yuge yang
my_other_signal = AsyncSignal (providing_args = {'contoh': ModelInstanceMap}) # dengan pemetaan
# Apa yang berikut bisa pergi ke mana pun - hanya contoh perlu di yourapp / signals.py:
def callback (pengirim, ** kwargs):
& Nbsp; print "Aku,% s, telah dengan ini dikirim asynchronous oleh% s, berkat Django-signalqueue." % (
& Nbsp; str (kwargs ['instance']),
& Nbsp; pengirim .__ name__)
my_signal.connect (callback)
... Perbedaan utama adalah definisi kedua, yang menentukan providing_args sebagai dict dengan kelas pemetaan bukannya daftar polos. Kami akan menjelaskan kelas pemetaan nanti, tetapi jika Anda melewati contoh Model Django sinyal Anda, Anda tidak perlu khawatir tentang hal ini.
Setelah pekerja berjalan, Anda dapat mengirim sinyal ke antrian seperti:
>>> My_signal.send (sender = AModelClass, misalnya = a_model_instance)
Untuk api sinyal seperti sinyal Django normal, Anda dapat melakukan hal ini:
>>> My_signal.send_now (sender = AModelClass, misalnya = a_model_instance)
Tune besok untuk kesimpulan yang menakjubkan ... README Django-signalqueue !!!!!!
Persyaratan :
- Python
- Django
Komentar tidak ditemukan