मैं एक विशिष्ट पायथन लिपि के स्मृति उपयोग के बारे में पूरी तरह उलझन में हूं। मुझे लगता है कि मुझे वास्तव में पता नहीं है कि 0 SOके बावजूद कई SO प्रश्न/Answers से उपयोग को कैसे प्रोफ़ाइल बनाना है।पायथन में मेमोरी उपयोग: memory_profiler और guppy के बीच क्या अंतर है?
मेरे प्रश्न हैं: memory_profiler
और guppy.hpy
के बीच क्या अंतर है? मुझे कोई क्यों बता रहा है कि मैं बड़ी मात्रा में स्मृति का उपयोग कर रहा हूं, और दूसरा मुझे बता रहा है कि मैं नहीं हूं?
मैं pysam
के साथ काम कर रहा हूं, जैव सूचना विज्ञान एसएएम/बीएएम फाइलों तक पहुंचने के लिए एक लाइब्रेरी। एसएएम (एएससीआईआई) से बीएएम (बाइनरी) में कनवर्ट करते समय और फ़ाइलों के बीच में हेरफेर करते समय मेरी मुख्य स्क्रिप्ट मेमोरी से जल्दी चल रही है।
मैंने यह समझने के लिए एक छोटा परीक्षण उदाहरण बनाया है कि प्रत्येक चरण में कितनी मेमोरी आवंटित की जाती है।
# test_pysam.py:
import pysam
#from guppy import hpy
TESTFILENAME = ('/projectnb/scv/yannpaul/MAR_CEJ082/' +
'test.sam')
#H = hpy()
@profile # for memory_profiler
def samopen(filename):
# H.setrelheap()
samf = pysam.Samfile(filename)
# print H.heap()
pass
if __name__ == "__main__":
samopen(TESTFILENAME)
memory_profiler (python -m memory_profiler test_pysam.py
) निम्न उत्पादन में परिणाम के साथ स्मृति उपयोग निगरानी:
Filename: test_pysam.py
Line # Mem usage Increment Line Contents
================================================
10 @profile # for memory_profiler
11 def samopen(filename):
12 10.48 MB 0.00 MB # print H.setrelheap()
13 539.51 MB 529.03 MB samf = pysam.Samfile(filename)
14 # print H.heap()
15 539.51 MB 0.00 MB pass
फिर @profile
डेकोरेटर बाहर टिप्पणी और guppy
सम्बंधित लाइन uncommenting, मैं निम्नलिखित निर्गम (python test_pysam.py
) मिलती है:
Partition of a set of 3 objects. Total size = 624 bytes.
Index Count % Size % Cumulative % Kind (class/dict of class)
0 1 33 448 72 448 72 types.FrameType
1 1 33 88 14 536 86 __builtin__.weakref
2 1 33 88 14 624 100 csamtools.Samfile
लाइन 13 का कुल आकार 52 9.03 एमबी एक मामले में है और दूसरे में 624 बाइट्स। वास्तव में यहाँ क्या चल रहा है? 'test.sam' एक ~ 52 एमबी एसएएम (फिर एक ASCII प्रारूप) फ़ाइल है। pysam
में गहरी खुदाई करने के लिए यह थोड़ा मुश्किल है, क्योंकि यह samtools
से संबंधित सी पुस्तकालय के चारों ओर एक रैपर है। वास्तव में Samfile
क्या है, मुझे लगता है कि मुझे यह जानने में सक्षम होना चाहिए कि इसे बनाने के लिए कितनी मेमोरी आवंटित की जाती है। मेरे बड़े, अधिक जटिल पायथन प्रोग्राम के प्रत्येक चरण के मेमोरी उपयोग को सही ढंग से प्रोफाइल करने के लिए मुझे किस प्रक्रिया का उपयोग करना चाहिए?
ध्यान दें कि 'test.sam' दूसरी पंक्ति पर है क्योंकि यह बहुत लंबा नाम था और एक बार मैंने इसे बदल दिया, मुझे एहसास हुआ कि अगर मैं एक लाइन पर फ़ाइल नाम डालता हूं तो मेरी लाइन नंबर जानकारी बंद हो जाएगी। – Yann