के साथ मौजूदा पायथन ऐप के हिस्सों को तेज़ करना मैं मौजूदा एप्लिकेशन में गति सुधार लाने के लिए देख रहा हूं और मैं अपने संभावित विकल्पों पर सलाह ढूंढ रहा हूं। एप्लिकेशन पायथन में लिखा गया है, wxPython का उपयोग करता है, और py2exe
(मैं केवल विंडोज प्लेटफॉर्म को लक्षित करता हूं) के साथ पैक किया जाता है। आवेदन के भाग कम्प्यूटेशनल गहन हैं और व्याख्या किए गए पायथन में बहुत धीरे-धीरे चलते हैं। मैं सी से परिचित नहीं हूं, इसलिए कोड ओवर के पोर्टिंग भागों वास्तव में मेरे लिए एक विकल्प नहीं है।पीपीपी या शेडस्किन
तो मेरा सवाल मूल रूप से मेरे विकल्पों की एक स्पष्ट तस्वीर है जैसा कि मैंने नीचे उल्लिखित किया है, या क्या मैं गलत दिशा से यह आ रहा हूं?
- PyPy के साथ चल रहा है: आज मैं PyPy के साथ प्रयोग शुरू कर दिया - परिणाम, रोमांचक हैं कि में मैं PyPy दुभाषिया से कोड के बड़े हिस्से को चला सकते हैं और मेरे पास कोई कोड में परिवर्तन के साथ 5x + गति सुधार दिखाई दे रहा है । हालांकि, अगर मैं सही ढंग से समझता हूं, (ए) wxpython समर्थन के साथ पापी still a work in progress है, और (बी) I cannot compile it down to an exe for distribution anyway। तो जब तक कि मैं गलत नहीं हूं, ऐसा लगता है कि यह मेरे लिए नहीं है? चीज़ों को पैकेज करने का कोई तरीका नहीं है इसलिए इसके कुछ हिस्सों को पिल्ला के साथ निष्पादित किया जाता है?
- कोड को RPy के साथ अनुवादित करने के लिए कोड को कनवर्ट करना, तो अगला विकल्प वास्तव में कोड के हिस्सों को पिराई प्रतिबंधित भाषा में दोबारा लिखना प्रतीत होता है, जो एक बहुत बड़ी नौकरी की तरह लगता है। लेकिन अगर मैं ऐसा करता हूं, तो कोड के कुछ हिस्सों को निष्पादन योग्य (?) में संकलित किया जा सकता है और फिर मैं ctypes (?) के माध्यम से कोड तक पहुंच सकता हूं।
- अन्य प्रतिबंधित विकल्प शेडस्किन यहां एक लोकप्रिय विकल्प प्रतीत होता है, क्या यह मेरी आवश्यकताओं को बेहतर बनाता है? अन्य विकल्प Cpython, Psyco, और Unladen प्रतीत होते हैं, लेकिन वे सभी को हटा दिया गया है या अब बनाए रखा नहीं है।
बहुत बहुत धन्यवाद, मैंने आपका जवाब स्वीकार कर लिया है। हालांकि, साइथन के साथ एक बहुत ही उत्पादक दोपहर के खेल के बाद, मुझे लगता है कि मैंने एक दुर्बल मुद्दा उठाया है: साइथन की थ्रेडिंग समर्थन की कमी। मेरी कम्प्यूटेशनल रूप से महंगा गणना, जो थ्रेड में भागने से पहले और जीयूआई को लॉक नहीं करती थी, अब सबकुछ फ्रीज करें। चारों ओर घूमने से, ऐसा लगता है कि यह डिज़ाइन द्वारा है; समांतरता प्राप्त करने के लिए (http://docs.cython.org/src/userguide/parallelism.html#parallel) जीआईएल को रिहा करना है, और जीआईएल में सभी कोड किसी भी मूल पायथन वस्तुओं का उपयोग नहीं कर सकते हैं, क्या मैं इसे सही ढंग से समझ रहा हूं? इससे साइथन कोई अच्छा नहीं होगा। – misshapen
@NickJ (1) मुझे नहीं पता कि साइथन पाइथन धागे का समर्थन करता है - लेकिन मुझे नहीं लगता कि यह क्यों नहीं कर सका। हो सकता है कि आप जिस विकल्प से लिंक करते हैं वह बस * पसंदीदा * है, क्योंकि यह एकाधिक CPUs का उपयोग कर सकता है। (2) मुझे यकीन नहीं है कि यह आपके हिस्से पर एक टाइपो है, लेकिन जीआईएल * द्वारा संरक्षित कोड * पाइथन प्रकारों का उपयोग करने में सक्षम होगा, जबकि 'नोगिल' सेक्शन नहीं हो सकते हैं (क्योंकि सीपीथन, और इस प्रकार सभी पायथन प्रकार, भरोसा करते हैं जीआईएल)। (3) इसके अलावा, आप जो भी आप अपेक्षाकृत शुद्ध साइथन कार्यों में समानांतर करना चाहते हैं और पाइथन के माध्यम से धागे को लात मारकर साइथन में 'थ्रेडिंग' के बिना दूर हो सकते हैं। – delnan