माफ करना, मैं अजगर से परिचित नहीं हूँ, लेकिन वहाँ एक general method कि काम करता है, यह मानते हुए आप मैन्युअल रूप से एक यादृच्छिक समय में निष्पादन बाधित कर सकते हैं।
बस ऐसा करें, और कॉल स्टैक प्रदर्शित करें। यह आपको उच्च संभावना के साथ बताएगा, जिसे आप जानना चाहते हैं। यदि आप अधिक निश्चित होना चाहते हैं, तो बस इसे कई बार करें।
यह काम करता है क्योंकि दोषी कॉलर को बर्बाद होने वाले समय के लिए कॉल स्टैक पर होना पड़ता है, जो उस समय के लिए आपके इंटरप्ट्स को उजागर करता है, चाहे वह कई छोटी कॉलों पर फैला हुआ हो या कुछ लंबा
नोट: यह प्रक्रिया माप से निदान की तरह अधिक है। मान लीजिए कि बुरी कॉल 90% बर्बाद कर रही है। फिर हर बार जब आप इसे रोकते हैं, तो संभावना 9 0% है कि आपके लिए कॉल स्टैक पर खराब कॉल स्टेटमेंट सही है, और आप यह देख पाएंगे कि यह बुरा है।हालांकि, अगर आप वास्तव में बर्बादी को मापना चाहते हैं, तो यह एक अलग समस्या है। इसके लिए, आपको यह देखने के लिए बहुत अधिक नमूने की आवश्यकता होगी कि उनमें से किस% में कॉल है। या वैकल्पिक रूप से, केवल दोषी कॉल को ठीक करें, गति को घड़ी दें, और यह आपको बताएगा कि बर्बादी क्या थी।
स्रोत
2009-05-10 18:45:34
आप एक फाइल करने के लिए cProfile के परिणामों को बचाने और प्रोफ़ाइल को लोड करने के लिए 'pstats' मॉड्यूल का उपयोग करते हैं तो आप सीधे भारी समारोह के कॉल करने के लिए क्वेरी कर सकते हैं:' loaded_stats_object.print_callers ('heavy_function') ' –