डेवलपर गाइड: सेवा कॉल ग्राफ़ उत्पन्न करना

यह दस्तावेज़ लंबे समय से चल रहे aura_engine.py का विज़ुअल कॉल ग्राफ़ उत्पन्न करने के लिए मजबूत, थ्रेड-सुरक्षित विधि का वर्णन करता है। हम विज़ुअलाइज़ेशन के लिए yappi प्रोफाइलर (मल्टी-थ्रेडिंग समर्थन के लिए) और gprof2dot का उपयोग करते हैं।

पूर्वावश्यकताएँ

सुनिश्चित करें कि आपके पास विश्व स्तर पर या आपके आभासी वातावरण में आवश्यक उपकरण स्थापित हैं:

CODE_ब्लॉक_0

चरण 1: प्रोफ़ाइलिंग के लिए सेवा को संशोधित करना

yappi प्रोफाइलर को मैन्युअल रूप से शुरू करने और रुकावट (Ctrl+C) पर प्रोफाइलिंग डेटा को शानदार ढंग से सहेजने के लिए aura_engine.py स्क्रिप्ट को संशोधित किया जाना चाहिए।

aura_engine.py में मुख्य परिवर्तन:

  1. आयात और सिग्नल हैंडलर: yappi आयात करें और yappi.stop() और stats.save(...) को कॉल करने के लिए generate_graph_on_interpt फ़ंक्शन को परिभाषित करें (जैसा कि पहले लागू किया गया था)।

  2. प्रारंभ/रोकें: main(...) के निष्पादन को पूरा करने के लिए if __name__ == "__main__": ब्लॉक के भीतर yappi.start() और signal.signal(signal.SIGINT, ...) जोड़ें।

चरण 2: सेवा चलाना और डेटा एकत्र करना

संशोधित स्क्रिप्ट को सीधे चलाएं और इसे पर्याप्त समय (उदाहरण के लिए, 10-20 सेकंड) के लिए डेटा संसाधित करने की अनुमति दें ताकि यह सुनिश्चित हो सके कि थ्रेडेड वाले (जैसे लैंग्वेजटूल सुधार) सहित सभी मुख्य फ़ंक्शन कॉल किए जाते हैं।

CODE_ब्लॉक_1

सिग्नल हैंडलर को ट्रिगर करने के लिए Ctrl+C को एक बार दबाएँ। यह प्रोफाइलर को रोक देगा और कच्चे डेटा को यहां सहेज देगा:

\mathbf{yappi\_profile\_data.prof

चरण 3: विज़ुअल ग्राफ़ बनाना और फ़िल्टर करना

हम कच्चे pstats डेटा को SVG प्रारूप में परिवर्तित करने के लिए gprof2dot का उपयोग करते हैं। चूँकि --include और --threshold जैसे उन्नत फ़िल्टरिंग विकल्प हमारे विशिष्ट वातावरण द्वारा समर्थित नहीं हो सकते हैं, हम पथ जानकारी को साफ़ करने और सिस्टम आंतरिक से अव्यवस्था को कम करने के लिए मूल --strip फ़िल्टर का उपयोग करते हैं।

विज़ुअलाइज़ेशन कमांड निष्पादित करें:

CODE_ब्लॉक_2

चरण 4: दस्तावेज़ीकरण (मैनुअल फ़सल)

परिणामी yappi_call_graph_stripped.svg (या .png) फ़ाइल बड़ी होगी, लेकिन इसमें सभी थ्रेड्स सहित पूर्ण निष्पादन प्रवाह सटीक रूप से शामिल है।

दस्तावेज़ीकरण उद्देश्यों के लिए, रिपॉजिटरी दस्तावेज़ीकरण के लिए एक केंद्रित और पठनीय कॉल ग्राफ़ बनाने के लिए केंद्रीय तर्क (10-20 कोर नोड्स और उनके कनेक्शन) पर ध्यान केंद्रित करने के लिए छवि को मैन्युअल रूप से क्रॉप करें

संग्रहित किया जा रहा है

संशोधित कॉन्फ़िगरेशन फ़ाइल और अंतिम कॉल ग्राफ़ विज़ुअलाइज़ेशन को दस्तावेज़ीकरण स्रोत निर्देशिका में संग्रहीत किया जाना चाहिए:

कलाकृति

स्थान

संशोधित सेवा फ़ाइल

doc_sources/profiling/aura_engine_profiling_base.py

अंतिम क्रॉप की गई छवि

doc_sources/profiling/core_logic_call_graph.svg

कच्चा प्रोफाइलिंग डेटा

(वैकल्पिक: अंतिम रिपॉजिटरी दस्तावेज़ीकरण से बाहर रखा जाना चाहिए)

yappi_call_graph