2011-07-05 12 views
14

Google ऐप इंजन की स्थगित कॉल के समान कुछ हासिल करने के लिए (यानी, अनुरोध संभाला जाता है, और बाद में स्थगित कार्य संभाला जाता है), मैंने थोड़ा प्रयोग किया और एक थ्रेड को हल करने के लिए समाधान के साथ आया जिसमें मेरी स्थगित कॉल संभाला है।क्या wsgi-application में थ्रेड को स्प्रे करना ठीक है?

अब मैं यह निर्धारित करने की कोशिश कर रहा हूं कि यह एक स्वीकार्य तरीका है या नहीं।

क्या यह संभव है (डब्लूएसजीआई विनिर्देश के मुताबिक) वास्तविक अनुरोध संभालने के बाद प्रक्रिया को वेबसर्वर द्वारा समाप्त कर दिया गया है, लेकिन सभी धागे खत्म होने से पहले?

(वहाँ एक बेहतर तरीका है, वह भी ठीक होगा)

+3

आप शायद प्रदर्शन के लिए दोनों प्रकार की कार्य कतार + थ्रेड पूल व्यवस्था चाहते हैं, और एक दूसरे को भूखे होने वाले इतने सारे धागे से बचने के लिए। – Marcin

+0

@ मार्सिन: अच्छा बिंदु, जब यह धागा दृष्टिकोण दिखाता है व्यवहार्य है, तो मैं इस तरह के एक बुनियादी ढांचे को लागू करूंगा – keppla

+0

मुझे निराश है कि आपके पास अभी तक कोई जवाब नहीं है। – Marcin

उत्तर

7

Fwiw, भी की एक पढ़ा है। हालांकि यह एक अलग धागे में नहीं है और वास्तविक अनुरोध के संदर्भ में होगा, हालांकि प्रतिक्रिया के बाद ग्राहक को वापस फ़्लश किया जाना चाहिए। इस प्रकार आपकी स्थगित कार्रवाई कार्य पूरा होने तक अनुरोध थ्रेड का उपभोग करेगी और इसलिए अनुरोध थ्रेड तब तक अन्य अनुरोधों को संभालने में सक्षम नहीं होगा।

सामान्य रूप से, यदि आप पृष्ठभूमि धागे का उपयोग करते हैं, तो कोई गारंटी नहीं है कि प्रक्रियाओं को बंद करने से पहले उन पृष्ठभूमि धागे पूर्ण होने तक कोई होस्टिंग तंत्र इंतजार करेगा। वास्तव में, किसी भी मानक तैनाती तंत्र के बारे में भी सोच नहीं सकते जो प्रतीक्षा करता है। वास्तव में यह भी गारंटी नहीं है कि अतुलनीय हैंडलर को प्रक्रिया बंद करने पर बुलाया जाएगा, कुछ संदर्भित दस्तावेज भी संक्षेप में बात करता है।

13

WSGI एक आवेदन प्रक्रिया के जीवनकाल को निर्दिष्ट नहीं करता है (जैसा कि WSGI आवेदन एक अजगर प्रतिदेय वस्तु है)। आप इसे ऐसे तरीके से चला सकते हैं जो वेब सर्वर से पूरी तरह से स्वतंत्र है, इस मामले में, केवल आप जीवनकाल को नियंत्रित करते हैं।

डब्लूएसजीआई में कुछ भी नहीं है जो आपको धागे, या प्रक्रियाओं, या जो कुछ भी आप चाहते हैं उसे करने से रोक देगा।()

http://code.google.com/p/modwsgi/wiki/RegisteringCleanupCode

कार्यों के hooking बंद करने के लिए की iterable WSGI विनिर्देश के संदर्भ में एक ही तरीका है आस्थगित काम करने के लिए है:

+1

ग्रेट शब्दावली। –