وبعد كمية معينة من أي شخص آخر بشأن أنفسهم مع الإطار جانغو سوف نطرح هذا السؤال: أنا أحب إشارات جانغو، في الواقع. ولكن إذا أنا فقط يمكن إرسالهم بشكل غير متزامن. مثل، على بعض الصفحات الأخرى أو شيء من هذا، وأنا لا أعرف حقا .... هل هذا ممكن بطريقة أو بأخرى؟
حسنا، الآن يمكنك القيام بذلك بسهولة مع جانغو-signalqueue.
رايتس ووتش، وسوف تظهر لك. أولا، تثبيت جانغو-signalqueue:
$ انتزاع تثبيت جانغو-signalqueue # هذا سيتم تثبيت اعصار وجانغو المندوب إذا لزم الأمر
... قد ترغب أيضا بعض من هذه الحزم الاختيارية، إذا لم يكن لديك بالفعل لهم:
$ الشراب تثبيت رديس yajl # ق / الشراب / الرابطة بين الحصول على / لذوق
$ PIP تثبيت رديس hiredis # أوصى
$ انتزاع تثبيت ujson # الموصى بها
$ انتزاع تثبيت czjson yajl simplejson # هذه العمل أيضا
$ PIP تثبيت الأنف جانغو الأنف # للاختبارات
إضافة جانغو-signalqueue إلى INSTALLED_APPS الخاص بك، وإعدادات طابور، في حين كنت في settings.py الخاص بك:
# settings.py
INSTALLED_APPS = [
على & nbsp؛ "signalqueue '، # ...
]
SQ_QUEUES = {
على & nbsp؛ 'افتراضي': {# تحتاج واحد على الأقل ديكت اسمه 'الافتراضية' في SQ_QUEUES
على & nbsp؛ 'اسم': 'signalqueue_default'، # اختياري - التخلف إلى 'signalqueue_default "
على & nbsp؛ "ENGINE ':' signalqueue.worker.backends.RedisSetQueue '، # المطلوب - وهذا هو سائق الطابور الخاص بك
على & nbsp؛ "INTERVAL ': 30، # 1/3 ثانية
على & nbsp؛ 'خيارات': ديكت ()،
على & nbsp؛}،
}
SQ_RUNMODE = 'SQ_ASYNC_REQUEST' # استخدام المتزامن بإيفاد الافتراضي
SQ_WORKER_PORT = 11231 # الميناء سوف العملية المنفذة قائمة الانتظار الخاصة بك ربط
وإلى جانب كل ذلك، تحتاج سوى مكالمة لsignalqueue.autodiscover () في URLConf الجذر الخاص بك:
# urls.py
signalqueue استيراد
signalqueue.autodiscover ()
يمكنك تحديد الإشارات المتزامن!
إشارات متزامنة هي حالات signalqueue.dispatch.AsyncSignal التي قمت بتحديدها في واحدة من الأماكن التالية:
- your_app / signals.py (انها على ما يرام إذا كنت تستخدم بالفعل هذا الملف، لا يصل إلى)
- وحدات اسمه في قائمة settings.SQ_ADDITIONAL_SIGNALS أو الصفوف (tuple)
- قريبا: signalqueue.register () - لذلك يمكنك وضعها في أي مكان آخر.
وتعرف AsyncSignals مثل الكثير من الحالات المألوفة من django.dispatch.Signal تعرفه والحب:
# yourapp / signals.py
من signalqueue.dispatch AsyncSignal استيراد
من signalqueue.mappings استيراد ModelInstanceMap
# هذه المنشئات اثنين تفعل الشيء نفسه
my_signal = AsyncSignal (providing_args = ['مثلا']) # وyuge
my_other_signal = AsyncSignal (providing_args = {'مثلا': ModelInstanceMap}) # مع تعيينات
# ما يلي يمكن الذهاب إلى أي مكان - فقط الحالات يجب أن تكون في yourapp / signals.py:
رد مواطنه (المرسل، ** kwargs):
على & nbsp؛ طباعة "I،٪ ق، تم بموجبه إيفاد بشكل غير متزامن بواسطة٪ الصورة، وذلك بفضل جانغو-signalqueue". ٪ (
على & nbsp؛ شارع (kwargs ['مثلا'])،
على & nbsp؛ مرسل .__ name__)
my_signal.connect (رد)
... والفرق الرئيسي هو التعريف الثاني، الذي يحدد providing_args باعتباره ديكت مع الطبقات رسم الخرائط بدلا من قائمة عادي. سنقوم شرح دروس رسم الخرائط في وقت لاحق، ولكن إذا كنت تمر حالات نموذج جانغو لإشارات الخاص بك، لم يكن لديك ما يدعو للقلق حول هذا الموضوع.
مرة واحدة يتم تشغيل عامل، يمكنك إرسال إشارة إلى قائمة انتظار مثل ذلك:
>>> my_signal.send (المرسل = AModelClass مثيل = a_model_instance)
لاطلاق النار إشارة الخاصة بك مثل إشارة جانغو العادية، يمكنك القيام بذلك:
>>> my_signal.send_now (المرسل = AModelClass مثيل = a_model_instance)
في تناغم غدا لإبرام مذهل من ... اقرأني جانغو-signalqueue !!!!!!
المتطلبات:
بيثون
جانغو
لم يتم العثور على التعليقات