software - python tutorial




কোন Python মেমরি প্রোফাইলার সুপারিশ করা হয়? (6)

আমি Dowser সুপারিশ। সেটআপ করা খুব সহজ, এবং আপনার কোডে শূন্য পরিবর্তন দরকার। আপনি সময়ের মাধ্যমে প্রতিটি টাইপের বস্তুর সংখ্যাগুলি দেখতে পারেন, লাইভ অবজেক্টগুলির তালিকা দেখতে, লাইভ অবজেক্টের রেফারেন্সগুলি দেখতে পারেন, সমস্ত সাধারণ ওয়েব ইন্টারফেস থেকে।

# memdebug.py

import cherrypy
import dowser

def start(port):
    cherrypy.tree.mount(dowser.Root())
    cherrypy.config.update({
        'environment': 'embedded',
        'server.socket_port': port
    })
    cherrypy.server.quickstart()
    cherrypy.engine.start(blocking=False)

আপনি memdebug আমদানি করুন, এবং memdebug.start কল করুন। এখানেই শেষ.

আমি Pyisizer বা heapy চেষ্টা করে নি। আমি অন্যদের রিভিউ কৃতজ্ঞ হবে।

হালনাগাদ

উপরের কোডটি CherryPy 2.X , CherryPy 3.X server.quickstart পদ্ধতি সরানো হয়েছে এবং engine.start blocking ফ্ল্যাগ গ্রহণ করে না। তাই আপনি CherryPy 3.X ব্যবহার করা হয়

# memdebug.py

import cherrypy
import dowser

def start(port):
    cherrypy.tree.mount(dowser.Root())
    cherrypy.config.update({
        'environment': 'embedded',
        'server.socket_port': port
    })
    cherrypy.engine.start()

আমি আমার পাইথন অ্যাপ্লিকেশনটির মেমরি ব্যবহার জানতে চাই এবং বিশেষ করে জানতে চাই কোন কোড ব্লক / অংশ বা বস্তু সবচেয়ে মেমরি খাওয়া হয়। গুগলের সার্চটি বাণিজ্যিকভাবে দেখায় পাইথন মেমরি ভ্যালিডেটর (শুধুমাত্র উইন্ডোজ)।

এবং ওপেন সোর্স বেশী PySizer এবং Heapy

আমি কাউকে চেষ্টা করিনি, তাই আমি জানতে চেয়েছিলাম যে কোনটি সেরা বিবেচনা করছে:

  1. সবচেয়ে বিস্তারিত দেয়।

  2. আমি আমার কোড কমপক্ষে বা কোন পরিবর্তন করতে হবে।


আমি meliae Heapy বা PySizer তুলনায় অনেক বেশি কার্যকরী পাওয়া যায়। যদি আপনি একটি wsgi ওয়েবপ্যাফ চালাচ্ছেন তবে Dozer ডোজারের একটি চমৎকার মিডলওয়্যারের মোড়ক


যেহেতু কেউ এটি উল্লেখ করেনি যেহেতু আমি আমার মডিউল memory_profiler নির্দেশ করব যা মেমরি ব্যবহারের লাইন-বাই-লাইন রিপোর্ট মুদ্রণ করতে সক্ষম এবং ইউনিক্স এবং উইন্ডোজগুলিতে কাজ করে (এই শেষটিতে psutil প্রয়োজন)। আউটপুটটি খুব বিস্তারিত নয় তবে লক্ষ্যটি আপনাকে কোডটির বেশি মেমরি খাওয়াচ্ছে এবং বরাদ্দকৃত বস্তুর উপর বিশদ বিশ্লেষণ না করার একটি সারসংক্ষেপ প্রদান করবে।

আপনার প্রোফাইলে @profile দিয়ে সজ্জিত করার পরে এবং -m memory_profiler ফ্ল্যাগের সাথে আপনার কোডটি চালানোর পরে এটি একটি লাইন-বাই-লাইন প্রতিবেদনের মতো মুদ্রণ করবে:

Line #    Mem usage  Increment   Line Contents
==============================================
     3                           @profile
     4      5.97 MB    0.00 MB   def my_func():
     5     13.61 MB    7.64 MB       a = [1] * (10 ** 6)
     6    166.20 MB  152.59 MB       b = [2] * (2 * 10 ** 7)
     7     13.61 MB -152.59 MB       del b
     8     13.61 MB    0.00 MB       return a

Heapy ব্যবহার করা বেশ সহজ। আপনার কোড কিছু সময়ে, আপনি নিম্নলিখিত লিখতে হবে:

from guppy import hpy
h = hpy()
print h.heap()

এটি আপনাকে এই মত কিছু আউটপুট দেয়:

Partition of a set of 132527 objects. Total size = 8301532 bytes.
Index  Count   %     Size   % Cumulative  % Kind (class / dict of class)
0  35144  27  2140412  26   2140412  26 str
1  38397  29  1309020  16   3449432  42 tuple
2    530   0   739856   9   4189288  50 dict (no owner)

আপনি বস্তুগুলির রেফারেন্স কোথায় এবং সে সম্পর্কে পরিসংখ্যান পেতে পারেন তা খুঁজে বের করতে পারেন, তবে যেকোন উপায়ে ডক্সগুলি কিছুটা অস্পষ্ট।

পাশাপাশি একটি গ্রাফিকাল ব্রাউজারও রয়েছে।


Muppy (এখনো অন্য) পাইথন জন্য মেমরি ব্যবহার প্রোফাইলার। এই টুলস এর ফোকাস মেমরি লিক সনাক্তকরণ উপর স্থাপিত হয়।

মুপি ডেভেলপারদের পাইথন অ্যাপ্লিকেশনগুলির পরিচয় মেমরি লিকগুলিতে সহায়তা করার চেষ্টা করে। এটি রানটাইম সময় মেমরি ব্যবহার ট্র্যাকিং এবং লিক যা বস্তুর সনাক্তকরণ সক্রিয় করতে পারবেন। উপরন্তু, সরঞ্জাম প্রদান করা হয় যা মুক্তি বস্তুর উৎস সনাক্ত করার অনুমতি দেয় না।


Pytracemalloc প্রকল্পটি ব্যবহার করে দেখুন যা পাইথন লাইন সংখ্যা প্রতি মেমরি ব্যবহার করে।

সম্পাদনা (2014/04): এটি এখন স্ন্যাপশট বিশ্লেষণ করার জন্য একটি QT GUI আছে।





profiling