def profiler(*args, **kwargs): nonlocal log_level log_level = log_level or (logging.TRACE if hasattr(logging, 'TRACE') else logging.DEBUG) if not logger.isEnabledFor(log_level): return fn(*args, **kwargs) name = fn_name(fn) with MemoryProfiler(enabled=memory) as m: if memory: mem = m.usage(before=True) logger.log(log_level, "[PROFILING] `%s`\n" "memory before; resident: %.2f MB, virtual: %.2f MB, unique: %.2f MB.\n" "gc before; threshold: %s, gen_count: %s, perm_count: %s", name, mem.resident, mem.virtual, mem.unique, gc.get_threshold(), gc.get_count(), gc.get_freeze_count()) with Timer(enabled=duration) as t: ret = fn(*args, **kwargs) if duration: logger.log(log_level, "[PROFILING] `%s` executed in %.3fs.", name, t.duration) if memory: ret_size = obj_size(ret) if ret_size > 0: logger.log(log_level, "[PROFILING] `%s` returned object size: %.3f MB.", name, to_mb(ret_size)) mem = m.usage() logger.log(log_level, "[PROFILING] `%s`\n" "memory after; resident: %+.2f MB/%.2f MB, virtual: %+.2f MB/%.2f MB, unique: %+.2f MB/%.2f MB.\n" "gc after; threshold: %s, gen_count: %s, perm_count: %s", name, mem.resident_diff, mem.resident, mem.virtual_diff, mem.virtual, mem.unique_diff, mem.unique, gc.get_threshold(), gc.get_count(), gc.get_freeze_count()) return ret
def f4(): '''垃圾自动回收''' print(gc.get_count()) #回收计数 # print(gc.get_objects()) #收集器所追踪的所有对象列表 print(gc.get_stats()) #回收统计 print(gc.get_threshold()) #回收阈值 a=A() print(gc.get_count()) # print(gc.get_objects()) print(gc.get_stats()) print(gc.get_threshold()) del a print(gc.get_count()) # print(gc.get_objects()) print(gc.get_stats()) print(gc.get_threshold()) print(gc.get_freeze_count())
def test_freeze(self): gc.freeze() self.assertGreater(gc.get_freeze_count(), 0) gc.unfreeze() self.assertEqual(gc.get_freeze_count(), 0)
def test_get_frozen_heap(self): gc.freeze() self.assertEqual(gc.get_freeze_count(), len(gc.get_frozen_objects())) gc.unfreeze()
def print_object_count(_connection=None): total_count = gc.get_num_objects() freeze_count = gc.get_freeze_count() gc_output('Object count: {}, Freeze count: {}', total_count, freeze_count)