2010-10-29 23 views
7

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

नोट 1: मैं मानक पायथन प्रोफाइलिंग टूल के बारे में अच्छी तरह से अवगत हूं। मैं विशेष रूप से संयुक्त पायथन/सी प्रोफाइलिंग के लिए देख रहा हूँ।

नोट 2: पायथन मॉड्यूल सीटीपीएस का उपयोग कर सी कोड को कॉल कर रहे हैं (विवरण के लिए http://docs.python.org/library/ctypes.html देखें)।

धन्यवाद!

+0

"इससे धीमा" था? तो आपको इसे क्यों बदलना है? – joni

+1

@joni: कोड कई अलग-अलग कारणों से बदल सकता है। साथ ही, यह किसी भी कोड में परिवर्तन के बिना धीमा हो सकता है (भारी वर्कलोड, व्यस्त सर्वर, नेटवर्क समस्याएं इत्यादि)। –

+0

@ जॉनी: चूंकि मैं इस एप्लिकेशन में पाइथन और सी दोनों में नियमित परिवर्तन कर रहा हूं, इसलिए मैं यह जानना चाहता हूं कि कोड में धीमी गति से चलने के कारण क्या परिवर्तन आया। – elesser

उत्तर

3

Stackshots काम। चूंकि आपने पाइथन और सी को जोड़ा है, इसलिए आप उन्हें अलग से संभाल सकते हैं। पायथन के लिए, आप स्टैक की जांच करने में धीमे होने पर Ctrl-C दबा सकते हैं। यह कई बार करो। इससे कुछ भी पता चलेगा जो आप पाइथन कोड में ठीक कर सकते हैं। सी कोड के लिए, पूरी चीज को जीडीबी जैसे डीबगर के तहत चलाएं और सी में स्टैक ट्रेस प्राप्त करने के लिए Ctrl-C दबाएं। उनमें से कई सी कोड में ठीक से कुछ भी बताएंगे। मुझे बताया गया है कि OProfile भी ऐसा कर सकता है। (एक और तरीका है lsstack उपयोग करने के लिए अगर यह उपलब्ध है।)

यह एक अल्पज्ञात विधि है कि इस सिद्धांत पर काम करता है: मान लीजिए आप एक अनंत लूप या एक लगभग अनंत लूप है। आप इसे कैसे ढूंढेंगे? आप कार्यक्रम को रोक देंगे और देखेंगे कि यह क्या कर रहा था, है ना? मान लीजिए कि कार्यक्रम केवल आवश्यकतानुसार दो बार लिया गया है। हर बार जब आप इसे रोकते हैं, तो मौका यह है कि आप इसे अनावश्यक चीज़ कर रहे हैं 50% है। तो आपको बस इतना करना है कि इसे कई बार रोक दें। जैसे ही आप इसे कुछ ऐसा करते हुए देखते हैं जिसे दो नमूने में सुधार किया जा सकता है, आप जानते हैं कि आप स्वस्थ गति के लिए इसे ठीक कर सकते हैं। फिर आप अगली समस्या पाने के लिए इसे दोहरा सकते हैं। माप बिंदु नहीं है। चीजों को पकड़ना जो आप सुधार सकते हैं वह बिंदु है।

+0

दिलचस्प विचार। मैं इस सप्ताह के अंत में कोशिश करूँगा। धन्यवाद। – elesser

1

संयोजन बहुत मुश्किल होगा, लेकिन (हालांकि मैं इसे कभी नहीं से बाहर सार्थक उत्पादन पाने में कामयाब रहे) आप valgrind, gprof या यहाँ तक कि oprofile जैसे मानक प्रोफाइलर से कुछ का उपयोग कर सकते हैं।

+0

प्रोफाइलर्स जिन्हें आप इन कारणों में से एक या अधिक कारणों से सार्थक नहीं समझ सकते हैं: http://stackoverflow.com/questions/1777556/alternatives-to-gprof/1779343#1779343 –

+0

द्वारा लिंक किया गया प्रश्न @ माइकडुनलेवी को हटा दिया गया है। – kynan

+0

@ किनान: हाँ। मुझे लगता है कि यह विवादास्पद है (हालांकि यह नहीं होना चाहिए)। जब आप पर्याप्त प्रतिनिधि प्राप्त करते हैं तो आप इसे देख सकते हैं। –

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