[Python-Dev] patch-finalizer vs Zope3
Tim Peters
tim.peters at gmail.com
Fri Nov 5 21:07:46 CET 2004
[Tim Peters]
> FYI, and without taking time for non-trivial analysis. I ran the non-ZEO
> Zope3 tests with a Python patched to treat weakrefs with callbacks as
> reachable (this was patch-finalizer.txt, attached to a msg I sent to
> python-dev last night).
>
> The first test to leave stuff in gc.garbage then:
>
> The following test left garbage:
> test_created (bugtracker.browser.tests.test_bug.BugBaseViewTest)
> 65
>
> where 65 is len(gc.garbage) after the test finished.
OK, that actually wasn't the first test to produce garbage, it was
just the first time test.py *noticed* gc.garbage wasn't empty. The
first test to produce garbage was BuddyCityState, and it produces
garbage in isolation:
C:\Code\Zope3>\code\python\PCbuild\python_d.exe test.py -vv . BuddyCityState
Configuration file found.
Running UNIT tests at level 1
Running UNIT tests from C:\Code\Zope3
BuddyCityState (buddydemo.buddy) ... ok
The following test left garbage:
BuddyCityState (buddydemo.buddy)
28 entries in gc.garbage:
0: <weakref at 03C86F20; to 'InterfaceClass' at 012B5930 (IWriteContainer)>
0x12B5930 is <InterfaceClass
zope.app.container.interfaces.IWriteContainer>
1: <weakref at 03C8E080; to 'InterfaceClass' at 00B5EAB8 (Interface)>
0xB5EAB8 is <InterfaceClass zope.interface.Interface>
2: <weakref at 03C8E1A0; to 'Surrogate' at 03C8D4D0>
0x3C8D4D0 is <Surrogate(<InterfaceClass
zope.app.container.interfaces.IWriteContainer>)>
3: <weakref at 03C8E278; to 'InterfaceClass' at 012B5578 (IObjectEvent)>
0x12B5578 is <InterfaceClass zope.app.event.interfaces.IObjectEvent>
4: <weakref at 03C8E398; to 'Surrogate' at 03C8D6C8>
0x3C8D6C8 is <Surrogate(<InterfaceClass
zope.app.event.interfaces.IObjectEvent>)>
5: <weakref at 03C8E3E0; to 'InterfaceClass' at 01197230 (IHTTPRequest)>
0x1197230 is <InterfaceClass zope.publisher.interfaces.http.IHTTPRequest>
6: <weakref at 03C8E500; to 'InterfaceClass' at 0118ACE8 (IRequest)>
0x118ACE8 is <InterfaceClass zope.publisher.interfaces.IRequest>
7: <weakref at 03C8E620; to 'InterfaceClass' at 0118A818 (IPublisherRequest)>
0x118A818 is <InterfaceClass zope.publisher.interfaces.IPublisherRequest>
8: <weakref at 03C8E740; to 'InterfaceClass' at 0118A5E8
(IPublicationRequest)>
0x118A5E8 is <InterfaceClass
zope.publisher.interfaces.IPublicationRequest>
9: <weakref at 03C8E860; to 'InterfaceClass' at 00DB9690
(IPresentationRequest)>
0xDB9690 is <InterfaceClass
zope.component.interfaces.IPresentationRequest>
10: <weakref at 03C8E980; to 'Surrogate' at 03C8DAB8>
0x3C8DAB8 is <Surrogate(<InterfaceClass
zope.component.interfaces.IPresentationRequest>)>
11: <weakref at 03C8E9C8; to 'InterfaceClass' at 00DA0188 (IParticipation)>
0xDA0188 is <InterfaceClass zope.security.interfaces.IParticipation>
12: <weakref at 03C8EAE8; to 'Surrogate' at 03C8DB28>
0x3C8DB28 is <Surrogate(<InterfaceClass
zope.security.interfaces.IParticipation>)>
13: <weakref at 03C8EB30; to 'Surrogate' at 03C8DA10>
0x3C8DA10 is <Surrogate(<InterfaceClass
zope.publisher.interfaces.IPublicationRequest>)>
14: <weakref at 03C8EB78; to 'Surrogate' at 03C8DA10>
0x3C8DA10 is <Surrogate(<InterfaceClass
zope.publisher.interfaces.IPublicationRequest>)>
15: <weakref at 03C8EBC0; to 'Surrogate' at 03C8D968>
0x3C8D968 is <Surrogate(<InterfaceClass
zope.publisher.interfaces.IPublisherRequest>)>
16: <weakref at 03C8EC08; to 'InterfaceClass' at 0118AC08
(IApplicationRequest)>
0x118AC08 is <InterfaceClass
zope.publisher.interfaces.IApplicationRequest>
17: <weakref at 03C8ED28; to 'InterfaceClass' at 01177F18 (IEnumerableMapping)>
0x1177F18 is <InterfaceClass
zope.interface.common.mapping.IEnumerableMapping>
18: <weakref at 03C8EE48; to 'InterfaceClass' at 01177D58 (IReadMapping)>
0x1177D58 is <InterfaceClass zope.interface.common.mapping.IReadMapping>
19: <weakref at 03C8EF68; to 'InterfaceClass' at 01177C40 (IItemMapping)>
0x1177C40 is <InterfaceClass zope.interface.common.mapping.IItemMapping>
20: <weakref at 03C8F0C8; to 'Surrogate' at 03C8DD20>
0x3C8DD20 is <Surrogate(<InterfaceClass
zope.interface.common.mapping.IItemMapping>)>
21: <weakref at 03C8F110; to 'Surrogate' at 03C8DC78>
0x3C8DC78 is <Surrogate(<InterfaceClass
zope.interface.common.mapping.IReadMapping>)>
22: <weakref at 03C8F158; to 'Surrogate' at 03C8DBD0>
0x3C8DBD0 is <Surrogate(<InterfaceClass
zope.interface.common.mapping.IEnumerableMapping>)>
23: <weakref at 03C8F1A0; to 'Surrogate' at 03C8D9D8>
0x3C8D9D8 is <Surrogate(<InterfaceClass
zope.publisher.interfaces.IApplicationRequest>)>
24: <weakref at 03C8F1E8; to 'Surrogate' at 03C8D8C0>
0x3C8D8C0 is <Surrogate(<InterfaceClass
zope.publisher.interfaces.IRequest>)>
25: <weakref at 03C8F230; to 'Surrogate' at 03C8D8C0>
0x3C8D8C0 is <Surrogate(<InterfaceClass
zope.publisher.interfaces.IRequest>)>
26: <weakref at 03C8F278; to 'Surrogate' at 03C8D8C0>
0x3C8D8C0 is <Surrogate(<InterfaceClass
zope.publisher.interfaces.IRequest>)>
27: <weakref at 03C8F2C0; to 'Surrogate' at 03C8D818>
0x3C8D818 is <Surrogate(<InterfaceClass
zope.publisher.interfaces.http.IHTTPRequest>)>
[703156 refs]
C:\Code\Zope3>
It appears generally true that, like in that test, gc.garbage gets
filled with (hundreds of thousands of) weakrefs specifically due to
adaptation machinery. By inspection, there are a lot of weakrefs
flying around there <wink>.
More information about the Python-Dev
mailing list