2011-03-11 12 views
8

एक बवंडर अनुरोध हैंडलर में यदि मुझे फ़ंक्शन foo() को कॉल करना है जो उपयोगकर्ता को वापस लौटाता है, तो यह पहले उपयोगकर्ता को परिणाम वापस करने के लिए समझ में आता है और फिर foo को कॉल करता है()। क्या यह आसानी से टर्ननाडो (या कुछ तीसरे पक्ष के पैकेज के साथ) में करना संभव है?वापसी के बाद अनुरोध हैंडलर में टोरनाडो प्रक्रिया डेटा

उत्तर

-1

नहीं, यह बॉक्स के बाहर "आसान" नहीं है। आप क्या कह रहे हैं "आग और भूल जाओ"। यहां तक ​​कि यदि आप अनुरोध को खेत के लिए थ्रेड पूल का उपयोग करते हैं, तो वह थ्रेड पूल मुख्य पायथन प्रक्रिया से संबंधित होगा जो टोरनाडो से संबंधित है।

सर्वोत्तम दृष्टिकोण एक संदेश कतार है। गाजर की तरह कुछ। इस तरह, मान लें कि आपके पास एक ऐसा पृष्ठ है जहां उपयोगकर्ता बड़ी रिपोर्ट उत्पन्न करने के लिए निष्पादित कर सकते हैं, आप इसे संदेश कतार में शुरू कर सकते हैं और फिर टोरनाडो अनुरोध को समाप्त कर सकते हैं और कुछ AJAX जादू और अन्य चाल (टोरनाडो के दायरे से बाहर) के साथ आप कर सकते हैं वापस बैठो और संदेश कतार समाप्त होने तक प्रतीक्षा करें (जो तकनीकी रूप से एक अलग भौतिक स्थान में वितरित सर्वर पर हो रहा है)।

+0

यह अत्यंत आसान है; मैं एक जवाब जोड़ूंगा। –

5

ioloop.add_callback, टोरनाडो अगले IOLoop पुनरावृत्ति में कॉलबैक निष्पादित करेगा।

0

खराब सलाह चेतावनी: आप मल्टीप्रोसेसिंग का उपयोग कर सकते हैं।

http://docs.python.org/library/multiprocessing.html

सावधान रहना है कि आप अपने डेटाबेस कनेक्शन के सभी बंद (पैदा कोड में) और जो कुछ भी बाकी बवंडर कर सकता है जब वह सामान्य रूप से एक उपप्रक्रिया के बिना एक अनुरोध के पूरे होने से करते हैं। अन्य उत्तरों बेहतर ध्वनि। लेकिन, आप यह कर सकते हैं। ऐसा मत करो।

9

यह अत्यंत आसान है:

class Handler(tornado.web.RequestHandler): 
    def get(self): 
     self.write('response') 
     self.finish() # Connection is now closed 
     foo() 
+0

क्या यह आईओ लूप को अवरुद्ध करेगा? – raylu

+2

हां, अगर foo() IO को अवरुद्ध करता है। नहीं, अगर foo() नहीं करता है। अंगूठे का नियम: अगर foo() IOStream का उपयोग करता है तो यह गैर-अवरुद्ध है। यदि यह IOStream के बिना सॉकेट का उपयोग करता है, तो यह अवरुद्ध हो रहा है। –

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