मैं एक अच्छा ऐप्पल प्रोफाइलर का उपयोग करता था जो सिस्टम मॉनीटर एप्लिकेशन में बनाया गया है। जब तक आपका सी ++ कोड डीबग जानकारी के साथ संकलित किया गया था, तब तक आप अपने चल रहे एप्लिकेशन का नमूना दे सकते हैं और यह एक इंडेंट पेड़ प्रिंट करेगा जो आपको बताएगा कि इस फ़ंक्शन में पेरेंट फ़ंक्शन का समय किस प्रतिशत खर्च किया गया था (और शरीर बनाम अन्य फ़ंक्शन कॉल) ।आप पाइथन प्रोफाइलर्स के साथ कॉल पेड़ कैसे प्राप्त कर सकते हैं?
उदाहरण के लिए, मुख्य यदि function_1
और function_2
कहा जाता है, function_2
कॉल function_3
, और फिर मुख्य कॉल function_3
:
main (100%, 1% in function body):
function_1 (9%, 9% in function body):
function_2 (90%, 85% in function body):
function_3 (100%, 100% in function body)
function_3 (1%, 1% in function body)
मैं इस को देखते हैं और सोचते हैं, "कुछ में कोड में एक लंबे समय ले जा रहा है function_2
का शरीर। यदि मैं चाहता हूं कि मेरा प्रोग्राम तेज़ी से हो, तो मुझे वह जगह शुरू करनी चाहिए। "
क्या कोई जानता है कि मैं आसानी से एक पाइथन प्रोग्राम के लिए यह सटीक प्रोफाइलिंग आउटपुट कैसे प्राप्त कर सकता हूं?
मैंने देखा है लोगों को यह करने के लिए कहते हैं:
import cProfile, pstats
prof = cProfile.Profile()
prof = prof.runctx("real_main(argv)", globals(), locals())
stats = pstats.Stats(prof)
stats.sort_stats("time") # Or cumulative
stats.print_stats(80) # 80 = how many to print
लेकिन यह है कि सुरुचिपूर्ण कॉल पेड़ की तुलना में काफी गंदा है। अगर आप आसानी से ऐसा कर सकते हैं तो कृपया मुझे बताएं, इससे काफी मदद मिलेगी।
चीयर्स!
क्या आप जानते हैं कि अगर इस पैकेज फ़ंक्शन कॉल के समय के साथ-साथ नंबर गुजरे कर सकते हैं? उदाहरण के लिए, मुझे हजारों बार __hash __() को कॉल करने में कोई दिक्कत नहीं होगी, लेकिन बड़े सूचियों पर बार-बार क्रमबद्ध कॉल करना काफी धीमा हो सकता है। – user
आपको बस उन्हें दोनों को आजमाएं। वे मूल रूप से अलग-अलग तरीकों से अलग-अलग तरीकों से एक ही काम करते हैं। – Falmarri
+1, पैकेज मेरे मन में जो कुछ था उसके साथ है और इंस्टॉल करने और कॉल करने के लिए तेज़ और आसान था। क्या आप मुझे बताते हैं कि आपको उपर्युक्त आंकड़ा कैसे मिला? मैंने ग्राफ बनाया है (pycallgraph.start_trace() और pycallgraph.make_dot_graph ('test.jpg', format = 'jpg', tool = 'neato') ) का उपयोग करके, लेकिन यह बहुत भीड़ में है और बहुत से फ़ंक्शन अस्पष्ट हैं। – user