Analyzing Python GC output - what is a "cell", and what information is available about it.
John Nagle
nagle at animats.com
Fri Jan 11 12:20:12 EST 2008
Duncan Booth wrote:
> John Nagle <nagle at animats.com> wrote:
>
>> I'm printing out each entry in "gc.garbage" after a garbage collection in
>> DEBUG_LEAK mode, and I'm seeing many entries like
>>
>> <cell at 0x00F7C170: function object at 0x00FDD6B0>
>>
>> That's the output of "repr". Are "cell" objects created only from
>> external C libraries, or can regular Python code generate them? Is there
>> any way to find out what the 'function object' is from within Python?
>>
> Cell objects are created whenever you have a function that references a
> variable in an outer scope. e.g.
>
> So in your case, cell.cell_contents.func_name might help.
Tried that:
print repr(item).encode('ascii','replace')
print "Type:",type(item)
try:
print item.cell_contents
except Exception, message:
print "Unprintable:",message
<cell at 0x00F88DF0: function object at 0x0100CFB0>
Type: <type 'cell'>
Unprintable: 'cell' object has no attribute 'cell_contents'
So it doesn't have a "cell_contents" attribute.
Tried:
print item.dir()
got:
'cell' object has no attribute 'dir'
Tried:
print item.__dict__
got:
'cell' object has no attribute '__dict__'
It looks like this is a low-level PyCellObject not generated from Python code.
Any ideas? I'm using the M2Crypto and MySQLdb libraries, and suspect
a reference count bug in one of those.
John Nagle
More information about the Python-list
mailing list