Ignore:
Timestamp:
May 14, 2009, 2:24:54 PM (15 years ago)
Author:
rwilson
Message:

Back-merge from Numeric trunk.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/numpy/anuga/utilities/log.py

    r6902 r7035  
    2424'''
    2525
    26 import sys
    2726import os
    2827import sys
     
    6059NOTSET = logging.NOTSET
    6160
    62 # get True if python version 2.5 or later
     61# set new_python to True if python version 2.5 or later
    6362(version_major, version_minor, _, _, _) = sys.version_info
    6463new_python = ((version_major == 2 and version_minor >= 5) or version_major > 2)
     
    103102        console.setFormatter(formatter)
    104103        logging.getLogger('').addHandler(console)
     104
     105        # catch exceptions
     106        sys.excepthook = log_exception_hook
    105107
    106108        # tell the world how we are set up
     
    122124    frames = traceback.extract_stack()
    123125    frames.reverse()
    124     (_, mod_name) = __name__.rsplit('.', 1)
     126    try:
     127        (_, mod_name) = __name__.rsplit('.', 1)
     128    except ValueError:
     129        mod_name = __name__
    125130    for (fpath, lnum, mname, _) in frames:
    126131        (fname, _) = os.path.basename(fpath).rsplit('.', 1)
     
    133138        logging.log(level, msg)
    134139
     140##
     141# @brief Hook function to process uncaught exceptions.
     142# @param type
     143# @param value
     144# @param traceback
     145# @note Same interface as sys.excepthook()
     146def log_exception_hook(type, value, tb):
     147    msg = ''.join(traceback.format_exception(type, value, tb))
     148    critical(msg)
     149
     150   
    135151################################################################################
    136152# Shortcut routines to make for simpler user code.
     
    176192    if sys.platform != 'win32':
    177193        _proc_status = '/proc/%d/status' % os.getpid()
    178         _scale = {'KB': 1024.0, 'MB': 1024.0*1024.0, 'GB': 1024.0*1024.0*1024.0,
    179                   'kB': 1024.0, 'mB': 1024.0*1024.0, 'gB': 1024.0*1024.0*1024.0}
     194        _scale = {'KB': 1024, 'MB': 1024*1024, 'GB': 1024*1024*1024,
     195                  'kB': 1024, 'mB': 1024*1024, 'gB': 1024*1024*1024}
    180196
    181197        def _VmB(VmKey):
     
    214230            return _VmB('VmStk:') - since
    215231
    216         msg = ('Resource usage: memory=%.1f resident=%.1f stacksize=%.1f'
    217                % (memory()/_scale['GB'], resident()/_scale['GB'],
    218                   stacksize()/_scale['GB']))
     232        msg = ('Resource usage: memory=%.1fMB resident=%.1fMB stacksize=%.1fMB'
     233               % (memory()/_scale['MB'], resident()/_scale['MB'],
     234                  stacksize()/_scale['MB']))
    219235        log(level, msg)
    220236    else:
    221         pass
     237        msg = ('Sorry, no memory statistics for Windows (yet).')
     238        log(level, msg)
     239
     240
     241if __name__ == '__main__':
     242##    critical('Testing exception capturing')
     243    def test_it(num=100):
     244        if num > 0:
     245            test_it(num-1)
     246        else:
     247            resource_usage()
     248
     249    import numpy as num
     250   
     251    a = num.zeros((1000,1000), num.float)
     252
     253    test_it()
Note: See TracChangeset for help on using the changeset viewer.