หลังจากที่จำนวนหนึ่งของเวลาที่ทุกคนที่เกี่ยวข้องกับตัวเองด้วยกรอบ Django จะไปถามคำถาม: ฉันรักสัญญาณ Django ของจริง แต่ถ้าเดียวที่ฉันจะส่งพวกเขาถ่ายทอดสด เช่นในบางหัวข้ออื่น ๆ หรือสิ่งที่ผมไม่ทราบจริงๆ .... นั่นคือเป็นไปได้อย่างใด?
ดีตอนนี้คุณสามารถทำกับ Django-signalqueue
นาฬิกาฉันจะแสดงให้คุณ ก่อนติดตั้ง Django-signalqueue:
$ จุดเล็ก ๆ ติดตั้ง Django-signalqueue # นี้จะติดตั้งพายุทอร์นาโดและ Django-ผู้แทนในกรณีที่จำเป็น
... คุณยังอาจต้องการบางส่วนของตัวเลือกแพคเกจเหล่านี้ถ้าคุณไม่ได้มีพวกเขาอยู่แล้ว
$ ชงติดตั้ง redis yajl # S / ชง / apt-get / เพื่อลิ้มรส
$ PIP ติดตั้ง redis hiredis # แนะนำ
$ จุดเล็ก ๆ ติดตั้ง ujson # แนะนำ
$ จุดเล็ก ๆ ติดตั้ง czjson yajl simplejson # การทำงานเหล่านี้มากเกินไป
$ PIP ติดตั้งจมูก # django จมูกสำหรับการทดสอบ
เพิ่ม Django-signalqueue เพื่อ INSTALLED_APPS ของคุณและการตั้งค่าสำหรับคิวในขณะที่คุณอยู่ใน settings.py ของคุณ:
# settings.py
INSTALLED_APPS = [
& nbsp; 'signalqueue', # ...
]
SQ_QUEUES = {
& nbsp; 'เริ่มต้น': {# ที่คุณต้องการอย่างน้อยหนึ่ง Dict ชื่อว่า 'เริ่มต้นใน SQ_QUEUES
& nbsp; 'ชื่อ': 'signalqueue_default', # ตัวเลือก - เริ่มต้นที่ 'signalqueue_default'
& nbsp; 'เครื่องยนต์': 'signalqueue.worker.backends.RedisSetQueue', # จำเป็น - นี่คือคนขับคิวของคุณ
& nbsp; 'ช่วง': 30 # 1/3 วินาที
& nbsp; 'ตัวเลือก': Dict ()
& nbsp;}
}
SQ_RUNMODE = 'SQ_ASYNC_REQUEST' # ใช้ส่ง async โดยค่าเริ่มต้น
SQ_WORKER_PORT = 11231 # พอร์ตกระบวนการทำงานคิวของคุณจะผูกกับ
นอกจากทั้งหมดที่คุณเพียงแค่ต้องเรียกร้องให้ signalqueue.autodiscover () ใน URLConf รากของคุณ:
# urls.py
นำเข้า signalqueue
signalqueue.autodiscover ()
คุณสามารถกำหนดสัญญาณ async!
สัญญาณไม่ตรงกันเป็นกรณีของ 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
# ทั้งสอง constructors ทำสิ่งเดียวกัน
my_signal = AsyncSignal (providing_args = ['เช่น']) # Yuge
my_other_signal = AsyncSignal (providing_args = {'เช่น': ModelInstanceMap}) # กับแมป
# สิ่งต่อไปนี้สามารถไปได้ทุกที่ - เพียงกรณีจำเป็นต้องอยู่ใน yourapp / signals.py:
โทรกลับ def (ผู้ส่ง ** kwargs):
& nbsp; พิมพ์ "ผม% s ได้รับการขอส่ง asynchronously โดย% s ขอบคุณ django-signalqueue." % (
& nbsp; Str (kwargs ['เช่น'])
& nbsp; ผู้ส่ง .__ name__)
my_signal.connect (โทรกลับ)
... แตกต่างที่สำคัญคือความหมายที่สองซึ่งระบุ providing_args เป็น Dict กับการเรียนทำแผนที่แทนที่จะเป็นรายการธรรมดา เราจะอธิบายการเรียนการทำแผนที่ในภายหลัง แต่ถ้าคุณจะผ่านอินสแตนซ์แบบ Django สัญญาณของคุณคุณจะได้ไม่ต้องกังวลเกี่ยวกับเรื่องนี้
เมื่อคนงานกำลังทำงานอยู่คุณสามารถส่งสัญญาณไปยังคิวเช่นดังนั้น:
>>> my_signal.send (ผู้ส่ง = AModelClass อินสแตนซ์ = a_model_instance)
ที่จะยิงสัญญาณของคุณเช่นปกติสัญญาณ Django คุณสามารถทำเช่นนี้:
>>> my_signal.send_now (ผู้ส่ง = AModelClass อินสแตนซ์ = a_model_instance)
ปรับในวันพรุ่งนี้สำหรับข้อสรุปที่น่าพิศวงของ ... README Django-signalqueue !!!!!!
ต้องการ
- หลาม
- Django
ความคิดเห็นที่ไม่พบ