मैं एक Django एप्लिकेशन पर काम कर रहा हूं जो उपयोगकर्ता को फ़ाइलों को अपलोड करने की अनुमति देता है। मुझे Amazon S3 पर भेजने से पहले इन फ़ाइलों पर कुछ सर्वर-साइड प्रसंस्करण करने की आवश्यकता है। this question और this blog post पर प्रतिक्रियाओं को पढ़ने के बाद मैंने फैसला किया कि इसे संभालने का सबसे अच्छा तरीका यह है कि मेरा व्यू हैंडलर Pyro रिमोट ऑब्जेक्ट पर एक विधि को अतुल्यकालिक रूप से प्रोसेस करने के लिए एक विधि का आह्वान करता है और फिर तुरंत क्लाइंट को एचटीपी 200 लौटाता है। मेरे पास यह प्रोटोटाइप है और ऐसा लगता है कि यह अच्छी तरह से काम करता है, हालांकि, मैं प्रसंस्करण की स्थिति को भी स्टोर करना चाहता हूं ताकि ग्राहक यह देखने के लिए आवेदन कर सके कि फ़ाइल संसाधित हो गई है और एस 3 पर अपलोड की गई है।मैं Django से एक लंबी चल रही प्रक्रिया के लिए राज्य को कैसे स्टोर करना चाहिए?
मैं आसानी से मतदान को संभाल सकता हूं, लेकिन मुझे यकीन नहीं है कि प्रक्रिया स्थिति को संग्रहीत करने के लिए उचित स्थान कहां है। इसे पाइरो प्रक्रिया द्वारा लिखने योग्य और मेरे मतदान दृश्य द्वारा पठनीय होने की आवश्यकता है।
- मुझे डेटा के लिए डेटाबेस में कॉलम जोड़ने में संकोच नहीं है जो वास्तव में केवल 30 से 60 सेकंड तक जारी रहना चाहिए।
- मैंने Django के low-level cache API का उपयोग करने और कुंजी आईडी के रूप में फ़ाइल आईडी का उपयोग करने पर विचार किया है, हालांकि, मुझे विश्वास नहीं है कि यह वास्तव में कैश फ्रेमवर्क के लिए डिज़ाइन किया गया है और मुझे यकीन नहीं है कि यह जाने के साथ क्या अप्रत्याशित समस्याएं हो सकती हैं मार्ग।
- आखिरकार, मैंने प्रसंस्करण करने वाले पाइरो ऑब्जेक्ट में राज्य को संग्रहीत करने पर विचार किया है, लेकिन फिर भी ऐसा लगता है कि मुझे एक बूलियन "प्रोसेसिंग_कंपलेट" डेटाबेस कॉलम जोड़ने की आवश्यकता होगी ताकि दृश्य जानता हो कि पाइरो से राज्य से पूछताछ हो या नहीं वस्तु।
बेशक, डेटाबेस से decoupling स्थिति के साथ कुछ डेटा अखंडता चिंताओं भी हैं (क्या होता है यदि सर्वर नीचे चला जाता है और यह सब डेटा स्मृति में है?)। मुझे यह सुनना है कि अधिक अनुभवी वेब एप्लिकेशन डेवलपर्स इस तरह के राज्यव्यापी प्रसंस्करण को कैसे संभालेंगे।
इस रात के बारे में सोचने के बाद मैंने फैसला किया है कि आप बिल्कुल सही हैं। यह समझ में नहीं आता है कि डेटाबेस का उपयोग न करें। मैंने यह भी तय किया है कि पाइरो यहां एक खराब फिट है और मुझे केवल सामान्य लोगों को करना चाहिए और लॉक फ़ाइल के साथ क्रॉन जॉब का उपयोग करना चाहिए। – bouvard
हम क्रॉन का उपयोग नहीं करते हैं। हमारे पास एक छोटी डब्लूएसजीआई सर्वर के रूप में हमारी बैच प्रणाली है और हम इसे उठाने के लिए urllib2 के साथ एक HTTP अनुरोध करते हैं। यह डब्लूएसजीआई अनुरोध से अनुरोध आईडी प्राप्त करता है; सामान्य Django ORM के साथ विवरण प्राप्त करता है। –
यह है कि मैंने पाइरो के साथ क्या करने की योजना बनाई है, लेकिन मुझे जिस समस्या का पता चलता है वह यह है कि अचानक सर्वर आउटेज दस्तावेजों को आधा संसाधित कर सकता है और प्रसंस्करण को फिर से शुरू करने के लिए कोई नया अनुरोध संदेश नहीं होगा। अगर मैं क्रॉन नौकरी का उपयोग करता हूं तो मुझे पता है कि मैं अनुरोध तालिका से पुरानी 10 अधूरा नौकरियां चुन सकता हूं और मैं किसी भी ऐसे पिकअप को उठाऊंगा जो आउटेज के दौरान कटऑफ हो। – bouvard