मैं वर्तमान में कुछ 10,000 या इतने इनपुट दस्तावेज़ों को संसाधित करने के लिए एक पायथन लिपि लिख रहा हूं। स्क्रिप्ट के प्रगति आउटपुट के आधार पर मुझे लगता है कि पहले 400+ दस्तावेज वास्तव में तेजी से संसाधित हो जाते हैं और फिर स्क्रिप्ट धीमा हो जाती है हालांकि इनपुट दस्तावेज़ सभी एक ही आकार के होते हैं।कई पुनरावृत्तियों पर उपयोग के लिए एकाधिक regexes को परिभाषित करने के पाइथोनिक और कुशल तरीके
मुझे लगता है कि यह इस तथ्य से हो सकता है कि अधिकांश दस्तावेज़ प्रसंस्करण regexes के साथ किया जाता है कि मैं संकलित होने के बाद regex ऑब्जेक्ट्स के रूप में सहेजता नहीं हूं। इसके बजाय, जब भी मुझे उनकी ज़रूरत होती है, मैं regexes recompile।
चूंकि मेरी स्क्रिप्ट में लगभग 10 अलग-अलग फ़ंक्शन हैं, जिनमें से सभी 10-20 अलग-अलग रेगेक्स पैटर्न का उपयोग करते हैं, मैं सोच रहा हूं कि पाइथन में रेगिक्स पैटर्न को दोबारा संकलित करने से बचने के लिए एक और अधिक प्रभावी तरीका क्या होगा (पर्ल में मैं बस एक संशोधक //o
शामिल कर सकता था)।
मेरे धारणा है कि अगर मैं
pattern = re.compile()
जिसके परिणामस्वरूप regex वस्तु (अगले चरण के लिए समारोह के अगले मंगलाचरण तक बनाकर नहीं रखे जाएंगे का उपयोग करने वाले कार्यों में regex वस्तुओं की दुकान प्रत्येक कार्य कहा जाता है लेकिन प्रति दस्तावेज़ एक बार)।
प्री-संकलित रेगेक्स की वैश्विक सूची बनाना एक अनैतिक विकल्प प्रतीत होता है क्योंकि मुझे वास्तव में उपयोग किए जाने के बजाय मेरे कोड में एक अलग स्थान पर रेगेक्स की सूची को स्टोर करने की आवश्यकता होगी।
इस साफ-सफाई और कुशलता से निपटने के तरीके पर कोई सलाह यहां दी गई है?
नहीं, इसे इस तथ्य के साथ करना है कि * आपका कैश समाप्त हो गया है *। –
क्या आपने अपना कोड प्रोफाइल किया है? – Daenyth
सभी दस्तावेजों पर लागू सभी कार्यों हैं? क्योंकि यदि हां, तो @ लार्समैन जवाब देते हैं, जबकि अच्छा, 400 दस्तावेजों के बाद मंदी की व्याख्या नहीं करता है। मैं अनुमान लगाने के बजाय प्रोफाइलिंग का सुझाव दूंगा ... –