http://www.python.org/ftp/python/contrib/System/Cyclops.py
# Module Cyclops version 0.9.4.
# Released to the public domain 18-Jul-1999,
# by Tim Peters (tim_one@email.msn.com).
Cyclops.py implements a CycleTracker class that provides major help in
finding and analyzing runtime cycles in Python programs.
Strong points:
+ Much faster than previous similar modules. Searching for cycles
takes time linear in the number of objects reachable from the
registered objects plus the number of arcs connecting them, and all
computation needed to display cycles is delayed until it's really
needed (if ever). Tens of thousands of objects and hundreds of
thousands of arcs can be analyzed in less than a minute on my creaky
old P5-166 system.
+ Many kinds of optional output reports, from a simple listing of
objects found in cycles, to a partitioning of cyclic objects into
maximal strongly-connected components.
+ Easy to add new types to the set of objects CycleTracker knows how
to "chase": pass appropriate functions to a CycleTracker instance's
chase_type() method. It's done this way instead of via subclassing
for speed.
+ An optional cycle-filter callback can be registered to ignore expected
cycles (typically those created by the Python implementation itself).
Weak points:
+ The problems this module helps to address are inherently difficult, and
CycleTracker doesn't make them any easier to understand or to fix -- it
only helps identify what and where they are. It's a tool, not a
solution.
+ All the optional abilities make for a steep learning curve.
+ Registering objects can distort the behavior of the program under
investigation, by keeping objects alive that would otherwise have died.
See the module docstring for discussion and workarounds.
<P><A HREF="http://www.python.org/ftp/python/contrib/System/Cyclops.py">
Cyclops.py 0.9.4</A> - tool for tracking cyclic structures in Python
programs. (18-Jul-99)
# Module Cyclops version 0.9.4.
# Released to the public domain 18-Jul-1999,
# by Tim Peters (tim_one@email.msn.com).
Cyclops.py implements a CycleTracker class that provides major help in
finding and analyzing runtime cycles in Python programs.
Strong points:
+ Much faster than previous similar modules. Searching for cycles
takes time linear in the number of objects reachable from the
registered objects plus the number of arcs connecting them, and all
computation needed to display cycles is delayed until it's really
needed (if ever). Tens of thousands of objects and hundreds of
thousands of arcs can be analyzed in less than a minute on my creaky
old P5-166 system.
+ Many kinds of optional output reports, from a simple listing of
objects found in cycles, to a partitioning of cyclic objects into
maximal strongly-connected components.
+ Easy to add new types to the set of objects CycleTracker knows how
to "chase": pass appropriate functions to a CycleTracker instance's
chase_type() method. It's done this way instead of via subclassing
for speed.
+ An optional cycle-filter callback can be registered to ignore expected
cycles (typically those created by the Python implementation itself).
Weak points:
+ The problems this module helps to address are inherently difficult, and
CycleTracker doesn't make them any easier to understand or to fix -- it
only helps identify what and where they are. It's a tool, not a
solution.
+ All the optional abilities make for a steep learning curve.
+ Registering objects can distort the behavior of the program under
investigation, by keeping objects alive that would otherwise have died.
See the module docstring for discussion and workarounds.
<P><A HREF="http://www.python.org/ftp/python/contrib/System/Cyclops.py">
Cyclops.py 0.9.4</A> - tool for tracking cyclic structures in Python
programs. (18-Jul-99)