2012-02-27 14 views
18

शुरू करें मेरे पास पाइथन में लिखा गया एप्लिकेशन और PyInstaller के साथ 'संकलित' है। यह जीयूआई ढांचे के लिए पीईक्यूटी का भी उपयोग करता है।विंडोज़: धीमी एप्लिकेशन

इस एप्लिकेशन को चलाने से मुख्य विंडो लोड होने से लगभग 10 सेकंड की देरी हो रही है और दिखाया गया है। जहां तक ​​मैं कह सकता हूं, यह मेरे कोड में धीमेपन के कारण नहीं है। इसके बजाए, मुझे संदेह है कि यह पाइथन रनटाइम प्रारंभ करने के कारण है।

समस्या यह है कि यह एप्लिकेशन कस्टम लॉन्चर/टास्कबार एप्लिकेशन के साथ शुरू किया गया है। उपयोगकर्ता ऐप लॉन्च करने के लिए बटन पर क्लिक करेगा, कुछ भी नहीं होने वाला दिखाई देगा, और किसी अन्य एप्लिकेशन पर कहीं और क्लिक करें। जब मेरा एप्लिकेशन इसकी खिड़की दिखाता है, तो यह SetForegroundWindow के नियमों के कारण अग्रभूमि में नहीं आ सकता है।

मेरे पास PyInstaller win32 लोडर, पायथन कोड और यहां तक ​​कि लॉन्चर कोड के लिए स्रोत तक पहुंच है।

मेरे प्रश्न हैं:

  • मैं कैसे इस आवेदन तेजी से शुरू कर सकते हैं?

  • मैं प्रक्रिया के जीवनकाल के पहले कुछ सेकंड में समय व्यतीत कैसे कर सकता हूं?

  • पहली विंडो दिखाए जाने तक समय को कम करने के लिए आम तौर पर स्वीकृत तकनीक क्या होती है?

मैं दो कारणों के लिए एक स्प्लैश स्क्रीन जोड़ने से बचना चाहते हैं - एक, मैं इसे मदद मिलेगी नहीं (भूमि के ऊपर है से पहले अजगर कोड चलाता है) और दो, मैं सिर्फ छप स्क्रीन पसंद नहीं है उम्मीद :)

यदि मुझे आवश्यकता है, तो शायद मैं एक विंडो बनाने के लिए PyInstaller लोडर स्टब संपादित कर सकता हूं, लेकिन यह एक और मार्ग है जिसे मैं नहीं लेना चाहता हूं।

सुझावों के लिए धन्यवाद।

उत्तर

1

मैंने py2exe और cx_Freeze का उपयोग करके कुछ wxPython ऐप्स को 'संकलित' किया है, उनमें से कोई भी शुरू करने के लिए 4 सेकंड से अधिक समय लेता है।

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

मैंने कभी भी पीईक्यूटी का उपयोग नहीं किया है, लेकिन WxPython के साथ स्टार्टअप की गति ठीक है, और पहली बार शुरू होने के बाद अगर मैं बंद और खोलता हूं, तो यह पहली बार तेज है।

8

मुझे संदेह है कि आप pyinstaller की "एक फ़ाइल" मोड का उपयोग कर रहे हैं - इस मोड का अर्थ है कि ऐप शुरू होने से पहले सभी पुस्तकालयों को एक अस्थायी निर्देशिका में अनपैक करना होगा। क्यूटी के मामले में, ये पुस्तकालय काफी बड़े हैं और डिकंप्रेस करने के लिए कुछ सेकंड लेते हैं। "एक निर्देशिका" मोड का उपयोग करने का प्रयास करें और देखें कि क्या इससे मदद मिलती है?

10

कंसोल-मोड निष्पादन योग्य बनाने के लिए PyInstaller को बताएं। यह आपको एक वर्किंग कंसोल देता है जिसे आप डिबगिंग के लिए उपयोग कर सकते हैं।

आपके मुख्य स्क्रिप्ट के शीर्ष पर, पहले आयात चलाने से पहले, एक प्रिंट "पायथन कोड प्रारंभ" जोड़ें। फिर कमांड लाइन से अपने पैक किए गए निष्पादन योग्य को चलाएं। इस तरह आप एक स्पष्ट तस्वीर प्राप्त कर सकते हैं कि क्या PyInstaller के बूटलोडर में या आपके आवेदन में समय बिताया गया है।

पायइन्स्टलर का बूटलोडर आमतौर पर एक-डीआईआर मोड में काफी तेज होता है, लेकिन यह एक फ़ाइल मोड में बहुत धीमा हो सकता है, क्योंकि यह सबकुछ अस्थायी निर्देशिका में भेजता है। विंडोज़ पर, I/O बहुत धीमा है, और फिर आपके पास एंटीवायरस हैं जो उन सभी DLL फ़ाइलों को दोबारा जांचना चाहते हैं।

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

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

+0

आप सही थे, मैंने एक सरल ऐप बनाया और वास्तव में स्टार्टअप समय लगभग तुरंत हो गया। मैं onedir मोड का उपयोग कर रहा हूँ। मेरा मानना ​​है कि समस्या मेरे कई आयात है। मेरे पास करने के लिए बहुत अधिक ट्रैकिंग है। –

+0

वाह, एंटीवायरस पर टिप के लिए धन्यवाद। एक बार जब मैंने अपना एवी अक्षम कर दिया, तो मेरा एक्सई बढ़ गया। – iridescent

1

मैं उपरोक्त उत्तरों से सहमत हूं। एक Qile मोड का उपयोग करते समय मेरे क्यूटी पायथन कार्यक्रम को एक सभ्य पीसी पर शुरू करने के लिए लगभग 5 सेकंड की आवश्यकता होती है। जब मैं --onedir में बदल जाता हूं, तो इसे शुरू करने में केवल एक सेकंड लग गया; यूजर डबल के बाद लगभग तुरंत exe फ़ाइल पर क्लिक करता है। लेकिन दोष यह है कि उस निर्देशिका में कई फाइलें हैं जो इतनी साफ नहीं हैं।

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