• 0

كيف أستطيع معرفة حجم الذاكرة المستخدمة بواسطة عملية بايثون؟

هل هنالك طريقة في بايثون لمعرفة حجم الذاكرة المستخدمة حاليا؟ لأنني أريد أن أعرف كم يستهلك برنامجي من الذاكرة لتقليله.

انشر على الشّبكات الاجتماعية


رابط هذه المساهمة
  • 0

هنالك عدة طرق يمكنك استخدامها لمعرفة حجم الاستهلاك في لغة بايثون، وتعتمد هذه الطرق على نوع نظام التشغيل الذي تستخدمه، فلو كنت تستخدم نظام ويندوز فيمكنك في هذه الحالة استخدام وحدة WMI التي تحتوي على عدة دوال يمكنك أن تساعدك كما في المثال التالي:

def memory():
    import os
    from wmi import WMI
    w = WMI('.')
    result = w.query("SELECT WorkingSet FROM Win32_PerfRawData_PerfProc_Process WHERE IDProcess=%d" % os.getpid())
    return int(result[0]['WorkingSet'])

أما في نظام لينكس فيمكنك استخدام دوال مكتبة os بالإضافة إلى ذلك سوف نعتمد على ملف status من proc لمعرفة حجم الاستهلاك كما في المثال التالي:

import os
_proc_status = '/proc/%d/status' % os.getpid()

_scale = {'kB': 1024.0, 'mB': 1024.0*1024.0,
          'KB': 1024.0, 'MB': 1024.0*1024.0}

def _VmB(VmKey):
    '''Private.
    '''
    global _proc_status, _scale
     # get pseudo file  /proc/<pid>/status
    try:
        t = open(_proc_status)
        v = t.read()
        t.close()
    except:
        return 0.0  # non-Linux?
     # get VmKey line e.g. 'VmRSS:  9999  kB\n ...'
    i = v.index(VmKey)
    v = v[i:].split(None, 3)  # whitespace
    if len(v) < 3:
        return 0.0  # invalid format?
     # convert Vm value to bytes
    return float(v[1]) * _scale[v[2]]


def memory(since=0.0):
    '''Return memory usage in bytes.
    '''
    return _VmB('VmSize:') - since


def resident(since=0.0):
    '''Return resident memory usage in bytes.
    '''
    return _VmB('VmRSS:') - since


def stacksize(since=0.0):
    '''Return stack size in bytes.
    '''
    return _VmB('VmStk:') - since

المصدر

انشر على الشّبكات الاجتماعية


رابط هذه المساهمة

يجب أن تكون عضوًا لدينا لتتمكّن من التعليق

انشاء حساب جديد

يستغرق التسجيل بضع ثوان فقط


سجّل حسابًا جديدًا

تسجيل الدخول

تملك حسابا مسجّلا بالفعل؟


سجّل دخولك الآن