2009-11-10 19 views
5

काम पर हमारी परियोजनाओं में सिंक्रोनस एप्लिकेशन (अल्पकालिक) और एसिंक्रोनस ट्विस्ट एप्लिकेशन (लंबे समय तक रहने वाले) शामिल हैं। हम अपने डेटाबेस को फिर से फैक्टर कर रहे हैं और उस मॉड्यूल में सभी एसक्यूएल को डीक्यूपल करने के लिए एपीआई मॉड्यूल बनाने जा रहे हैं। मैं उस एपीआई को बनाना चाहता हूं ताकि दोनों सिंक्रोनस और एसिंक्रोनस एप्लिकेशन इसका उपयोग कर सकें। सिंक्रोनस अनुप्रयोगों के लिए मैं डेटाबेस एपीआई को केवल MySQLdb का उपयोग करने के लिए डेटा (अवरुद्ध) वापस करने के लिए कॉल करना चाहता हूं, लेकिन एसिंक्रोनस एप्लिकेशन के लिए मैं एक ही एपीआई फ़ंक्शंस/विधियों को गैर-अवरुद्ध करने के लिए कॉल करना चाहता हूं, शायद वापस लौटना एक स्थगित किसी के पास कोई संकेत, सुझाव या सहायता है जो वे मुझे ऐसा करने की पेशकश कर सकते हैं? अग्रिम धन्यवाद, डौगपायथन ट्विस्ट और डेटाबेस कनेक्शन

उत्तर

0

क्या आपने continuation-passing style से एक पृष्ठ उधार लेने पर विचार किया है? स्टैकलेस पायथन supports continuations directly, यदि आप इसका उपयोग कर रहे हैं, और दृष्टिकोण पहले से ही gained some interest प्रतीत होता है।

3

twisted.enterprise.adbapi जाने का तरीका लगता है - क्या आपको लगता है कि यह आपकी आवश्यकताओं से मेल खाने में विफल रहता है, और यदि ऐसा है, तो क्या आप कृपया बता सकते हैं क्यों?

1

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

इनलाइन कॉलबैक या स्थगित जेनरेटर आपकी समस्या का समाधान करेगा? उन्हें आधुनिक मुड़ने की आवश्यकता होती है। See the twistedmatrix docs

def thingummy(): 
    thing = yield makeSomeRequestResultingInDeferred() 
    print thing #the result! hoorj! 
thingummy = inlineCallbacks(thingummy) 

एक अन्य विकल्प दो तरीकों से एक ही एसक्यूएल टेम्पलेट, जिनमें runInteraction, जो ब्लॉक, और एक जो runQuery है, जो एक स्थगित रिटर्न का उपयोग करता है का उपयोग करता है पर अमल करने के लिए होगा, लेकिन है कि और अधिक कोड रास्तों जो करना शामिल होगा वही चीज़।

0

मैंने देखा है कि सभी डेटाबेस पुस्तकालयों को जिद्दी सिंक्रोनस लगता है।

ऐसा प्रतीत होता है कि Twisted.enterprise.abapi कनेक्शन पूल को प्रबंधित करने और अंतर्निहित डेटाबेस लाइब्रेरी को लपेटने के लिए थ्रेड का उपयोग करके इस समस्या को हल करता है। यह स्पष्ट रूप से आदर्श नहीं है, लेकिन मुझे लगता है कि यह काम करेगा, लेकिन मैंने वास्तव में इसे स्वयं नहीं किया है।

आदर्श रूप से sqlalchemy और twisted एकीकृत करने का कोई तरीका होगा। मुझे यह प्रोजेक्ट मिला, nadbapi, जो ऐसा करने का दावा करता है, लेकिन ऐसा लगता है कि इसे 2007 से अपडेट नहीं किया गया है।

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