2009-02-09 7 views
7

मैं बहुत सारे फ़ाइल एक्सेस के साथ एक पायथन प्रोग्राम लिख रहा हूं। यह आश्चर्यजनक रूप से धीरे-धीरे चल रहा है, इसलिए मैंने समय निकालने के लिए सीप्रोफाइल का उपयोग किया।पायथन की "अंतर्निहित विधि अधिग्रहण" क्या है? मैं इसे कैसे बढ़ा सकता हूं?

ऐसा लगता है कि पाइथन "{अंतर्निहित विधि अधिग्रहण}" के रूप में रिपोर्ट करने वाले समय में बिताए गए समय में लॉट है। मुझे नहीं पता कि यह विधि क्या है। यह क्या है, और मैं अपने कार्यक्रम को कैसे बढ़ा सकता हूं?

उत्तर

5

अपना कोड देखे बिना, अनुमान लगाना मुश्किल है। लेकिन अनुमान लगाने के लिए मैं कहूंगा कि यह threading.Lock.acquire विधि है। आपके कोड का एक हिस्सा थ्रेडिंग लॉक प्राप्त करने का प्रयास कर रहा है, और यह तब तक इंतजार कर रहा है जब तक कि उसे प्राप्त न हो जाए।

वहां से

  • अपनी फ़ाइल पहुँच पुनर्गठन यह तय करने के सरल तरीके हो सकता है
  • ताला लगा नहीं,
  • बिल्कुल धागे अवरुद्ध = झूठी,
  • या यहाँ तक कि का उपयोग नहीं कर इस्तेमाल करते हैं।

लेकिन फिर, आपके कोड को देखे बिना, अनुमान लगाना मुश्किल है।

+0

यह _not_ थ्रेडिंग है। लॉक.एक्वायर विधि। यह थ्रेडिंग हो जाता है। कंडीशन.एक्वायर विधि। दुर्भाग्य से, प्रोफ़ाइल आउटपुट में उन्हें अलग करने का कोई तरीका नहीं प्रतीत होता है। –

+1

दो चीजें समान स्थितियों का प्रतिनिधित्व करती हैं। –

0

आईओ के लिए धागे का उपयोग करना एक बुरा विचार है। थ्रेडिंग आपके प्रोग्राम को तेज़ी से इंतजार नहीं करेगी। आप एसिंक्रोनस I/O और इवेंट लूप का उपयोग करके बेहतर परिणाम प्राप्त कर सकते हैं; अपने कार्यक्रम के बारे में अधिक जानकारी पोस्ट करें, और आप धागे का उपयोग क्यों कर रहे हैं।

+0

मैं धागे का उपयोग कर रहा हूं क्योंकि मुझे धीमा नेटवर्क पढ़ने का ऑपरेशन चल रहा है, और मुझे लोड होने के बाद डेटा पर कुछ प्रोसेसिंग करने की आवश्यकता है। वर्तमान डिज़ाइन के साथ, मैं दो डेटासेट लोड कर सकता हूं, प्रत्येक पर एक मर्ज कुंजी उत्पन्न कर सकता हूं, और उन्हें मर्ज और सहेज सकता हूं। शायद इसके लिए एक घटना लूप बेहतर है, लेकिन मुझे शक है। –

+0

-1, एकाधिक I/O संचालन थ्रेडिंग पाइथन में फायदेमंद हो सकता है क्योंकि प्रत्येक थ्रेड जीआईएल जारी करेगा जबकि ओएस अनुरोध को संसाधित करने की प्रतीक्षा कर रहा है। –

+0

@ डेविड: और एसिंक्रोनस I/O का उपयोग करने से यह कितना बेहतर है? – nosklo

0

आप उस विधि के भीतर से "कुल समय का उपयोग" के लिए नहीं, बल्कि सीपीयू का उपयोग करना चाहते हैं - जो मदद कर सकता है। क्षमा करें, मैं अजगर का उपयोग नहीं करता हूं, लेकिन यह है कि यह मेरे लिए रूबी में है :) -r

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