2013-06-25 4 views
14

क्या क्लाइंट को प्रतिक्रिया भेजने के लिए फ्लास्क में कोई तरीका है और फिर कुछ प्रोसेसिंग जारी रखें? मेरे पास कुछ पुस्तक-पालन कार्य हैं जो किए जाने हैं, लेकिन मैं ग्राहक को प्रतीक्षा नहीं करना चाहता हूं।फ्लास्क एंड प्रतिक्रिया और प्रसंस्करण जारी रखें

ध्यान दें कि ये वास्तव में वास्तव में तेज़ चीजें हैं जो मैं करना चाहता हूं, इस प्रकार एक नया धागा बनाना, या कतार का उपयोग करना, वास्तव में यहां उचित नहीं है। (इन तेजी से बातों में से एक वास्तव में एक नौकरी कतार में कुछ जोड़ रहा है।)

+1

'सेलेरी' या अन्य प्रश्नों को देखें http://stackoverflow.com/q/16870858/880326 और http://stackoverflow.com/q/15969213/880326। – tbicr

उत्तर

4

Teardown Callbacks जैसा लगता है कि आप जो चाहते हैं उसका समर्थन करेंगे। और कोड को व्यवस्थित करने में सहायता के लिए आप इसे Per-Request After-Request Callbacks से पैटर्न के साथ जोड़ना चाहेंगे।

+0

यह जो मैं चाहता हूं उसके सबसे नज़दीक दिखता है। यह पथ विशिष्ट नहीं है लेकिन वह पैटर्न दिखाता है कि इसे आसानी से कैसे किया जा सकता है। –

+0

आप अंत में काम कोड मिला है? – luckydonald

+1

बस एक अपडेट - यह * नहीं * पूरा करता है जो पूछताछ चाहता है क्योंकि फ्लास्क अभी भी प्रतिक्रिया जारी करने से पहले खत्म करने के लिए टियरडाउन कार्यों पर इंतजार कर रहा है। –

2

आप कैसे विचार का सार बोतल यहाँ https://gist.github.com/jzempel/3201722

के भीतर से अजवाइन का उपयोग करने पर एक उदाहरण मिल सकते हैं (यमक इरादा) है लंबे, पुस्तक-पालन कार्यों को @ celery.task के रूप में परिभाषित करने के लिए और apply_async 1 का उपयोग करें या कार्य को शुरू करने के लिए दृश्य में से देरी

2

मुझे अपने ब्लॉग के साथ एक ही समस्या थी। जब कोई नई टिप्पणी पोस्ट की गई थी, तो मैं टिप्पणियों की सदस्यता लेने वालों को अधिसूचना ईमेल भेजना चाहता था, लेकिन मैं उस व्यक्ति को टिप्पणी नहीं भेजना चाहता था कि वह अपनी प्रतिक्रिया प्राप्त करने से पहले सभी ईमेल भेजने के लिए प्रतीक्षा कर रहा हो।

मैंने इसके लिए multiprocessing.Pool का उपयोग किया था। मैंने एक कार्यकर्ता का पूल शुरू किया (वह पर्याप्त, कम यातायात साइट था) और फिर हर बार मुझे एक ईमेल भेजने की आवश्यकता होती है, मैं फ्लास्क व्यू फ़ंक्शन में सबकुछ तैयार करता हूं, लेकिन अंतिम send_email को apply_async के माध्यम से पूल में कॉल करें।

संबंधित मुद्दे