Flask
सिग्नल
खोज…
टिप्पणियों
फ्लास्क ब्लिंकर का उपयोग करके संकेतों का समर्थन करता है। सिग्नल समर्थन वैकल्पिक है; वे केवल तभी सक्षम होंगे जब ब्लिंकर स्थापित हो।
pip install blinker
http://flask.pocoo.org/docs/dev/signals/
सिग्नल एसिंक्रोनस नहीं हैं। जब एक संकेत भेजा जाता है, तो यह तुरंत जुड़े कार्यों में से प्रत्येक को क्रमिक रूप से निष्पादित करता है।
संकेतों से जुड़ना
फ़ंक्शन को सिग्नल से कनेक्ट करने के connect
सिग्नल की connect
विधि का उपयोग करें। जब कोई संकेत भेजा जाता है, तो प्रत्येक जुड़े फ़ंक्शन को प्रेषक और किसी भी नामित तर्क के साथ बुलाया जाता है।
from flask import template_rendered
def log_template(sender, template, context, **kwargs):
sender.logger.info(
'Rendered template %(template)r with context %(context)r.',
template=template, context=context
)
template_rendered.connect(log_template)
वे किस तर्क के बारे में जानकारी के लिए अंतर्निहित संकेतों पर प्रलेखन देखें। एक उपयोगी पैटर्न किसी भी अप्रत्याशित तर्कों को पकड़ने के लिए **kwargs
तर्क जोड़ रहा है।
कस्टम संकेत
यदि आप अपने स्वयं के कोड में सिग्नल बनाना और भेजना चाहते हैं (उदाहरण के लिए, यदि आप कोई एक्सटेंशन लिख रहे हैं), तो एक नया Signal
इंस्टेंस बनाएं और जब ग्राहकों को सूचित किया जाए तो कॉल send
। सिग्नल एक Namespace
का उपयोग करके बनाए जाते हैं।
from flask import current_app
from flask.signals import Namespace
namespace = Namespace()
message_sent = namespace.signal('mail_sent')
def message_response(recipient, body):
...
message_sent.send(
current_app._get_current_object(),
recipient=recipient,
body=body
)
@message_sent.connect
def log_message(app, recipient, body):
...
सीधे ब्लिंकर का उपयोग करने पर फ्लास्क के सिग्नल समर्थन का उपयोग करना पसंद करें। यह लाइब्रेरी को लपेटता है ताकि सिग्नल वैकल्पिक रहें यदि आपके एक्सटेंशन का उपयोग करने वाले डेवलपर्स ने ब्लिंकर स्थापित करने का विकल्प नहीं चुना है।