मैं अपने कोड को तेज़ करने के लिए पाइथन प्रोफाइलर का उपयोग करने की कोशिश कर रहा हूं। मैं उस विशिष्ट कार्य को पहचानने में सक्षम हूं जहां लगभग हर समय बिताया जाता है, लेकिन मैं यह नहीं समझ सकता कि उस कार्य में कहां खर्च किया जा रहा है।पायथन प्रोफ़ाइल आउटपुट को समझना
नीचे मेरे पास प्रोफ़ाइल आउटपुट है, जो दिखाता है कि "एपेंडबॉलॉट" प्राथमिक अपराधी है और लगभग 116 सेकंड का उपभोग करता है। नीचे, मेरे पास "appendBallot" के लिए कोड है।
मैं प्रोफ़ाइल आउटपुट से नहीं समझ सकता, "एपेंडबॉलॉट" का कौन सा हिस्सा मुझे अनुकूलित करने की आवश्यकता है क्योंकि अगली उच्चतम समय प्रविष्टि एक सेकंड से भी कम है। मुझे यकीन है कि आप में से कई मुझे सिर्फ मेरे कोड से बता सकते हैं, लेकिन मैं समझना चाहता हूं कि प्रोफ़ाइल आउटपुट से उस जानकारी को कैसे प्राप्त किया जाए। किसी भी तरह की सहायता का स्वागत किया जाएगा।
प्रोफ़ाइल उत्पादन:
ncalls tottime percall cumtime percall filename:lineno(function)
1 0.000 0.000 116.168 116.168 <string>:1(<module>)
1 0.001 0.001 116.168 116.168 {execfile}
1 0.003 0.003 116.167 116.167 foo.py:1(<module>)
1 0.000 0.000 116.139 116.139 ballots.py:330(loadKnown)
1 0.000 0.000 116.109 116.109 plugins.py:148(load)
1 0.196 0.196 116.108 116.108 BltBallotLoader.py:37(loadFile)
100000 114.937 0.001 115.912 0.001 ballots.py:133(appendBallot)
100000 0.480 0.000 0.790 0.000 ballots.py:117(newBallot)
316668 0.227 0.000 0.310 0.000 ballots.py:107(getNumCandidates)
417310/417273 0.111 0.000 0.111 0.000 {len}
200510 0.071 0.000 0.071 0.000 {method 'append' of 'list' objects}
99996 0.045 0.000 0.045 0.000 {method 'add' of 'set' objects}
100000 0.042 0.000 0.042 0.000 {method 'has_key' of 'dict' objects}
1 0.000 0.000 0.030 0.030 plugins.py:202(getLoaderPluginClasses)
1 0.000 0.000 0.030 0.030 plugins.py:179(getPluginClasses)
1 0.000 0.000 0.030 0.030 plugins.py:205(getLoaderPluginClass)
3 0.016 0.005 0.029 0.010 {__import__}
1 0.022 0.022 0.025 0.025 ballots.py:1(<module>)
1 0.010 0.010 0.013 0.013 BltBallotLoader.py:1(<module>)
7 0.000 0.000 0.003 0.000 re.py:227(_compile)
कोड:
def appendBallot(self, ballot, ballotID=None):
"Append a ballot to this Ballots object."
# String representation of ballot for determining whether ballot is unique
ballotString = str(list(ballot))
# Ballot as the appropriate array to conserve memory
ballot = self.newBallot(ballot)
# Assign a ballot ID if one has not been given
if ballotID is None:
ballotID = len(self.ballotIDs)
assert(ballotID not in self.ballotIDs)
self.ballotIDs.append(ballotID)
# Check to see if we have seen this ballot before
if self.uniqueBallotsLookup.has_key(ballotString):
i = self.uniqueBallotsLookup[ballotString]
self.uniqueBallotIDs[i].add(ballotID)
else:
i = len(self.uniqueBallots)
self.uniqueBallotsLookup[ballotString] = i
self.uniqueBallots.append(ballot)
self.uniqueBallotIDs.append(set([ballotID]))
self.ballotOrder.append(i)
यह वास्तव में जोरदार() है जो हर समय घूम रहा है। मुझे आश्चर्य है कि पाइथन प्रोफाइलर जोरदार() कथनों को अनदेखा करता है क्योंकि कोड को ओओ, –
के साथ चलाने के लिए निष्पादित नहीं किया जाएगा, सभी सहायक उत्तरों के लिए धन्यवाद। –
पायथन प्रोफाइलर विधि में सभी अन्य/कथन/अनदेखा करने की तुलना में 'जोर'/कथन/किसी और को अनदेखा नहीं कर रहा है। केवल 'अभिव्यक्ति अभिव्यक्ति' के बजाय 'जोर दें (अभिव्यक्ति)' लिखना इसे फ़ंक्शन कॉल में नहीं बदलता है जिसे अनगिनत किया जा सकता है। –