annotate Tools/scripts/import_diagnostics.py @ 87690:66c1c9f32567 default tip

Add use_weakref option to functools.lru_cache The use_weakref option makes lru_cache create weak references to the function arguments when creating the cache key, which prevents them from staying in the memory forever even after all other references to them are gone. This is a proof of concept for http://bugs.python.org/issue19859
author Radomir Dopieralski <devel@sheep.art.pl>
date Tue, 03 Dec 2013 16:02:48 +0100
parents 00221c8b7c86
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
76553
e91a8467328b Start a shared utility script for poking around at the import internals
Nick Coghlan <ncoghlan@gmail.com>
parents:
diff changeset
1 #!/usr/bin/env python3
e91a8467328b Start a shared utility script for poking around at the import internals
Nick Coghlan <ncoghlan@gmail.com>
parents:
diff changeset
2 """Miscellaneous diagnostics for the import system"""
e91a8467328b Start a shared utility script for poking around at the import internals
Nick Coghlan <ncoghlan@gmail.com>
parents:
diff changeset
3
e91a8467328b Start a shared utility script for poking around at the import internals
Nick Coghlan <ncoghlan@gmail.com>
parents:
diff changeset
4 import sys
e91a8467328b Start a shared utility script for poking around at the import internals
Nick Coghlan <ncoghlan@gmail.com>
parents:
diff changeset
5 import argparse
e91a8467328b Start a shared utility script for poking around at the import internals
Nick Coghlan <ncoghlan@gmail.com>
parents:
diff changeset
6 from pprint import pprint
e91a8467328b Start a shared utility script for poking around at the import internals
Nick Coghlan <ncoghlan@gmail.com>
parents:
diff changeset
7
e91a8467328b Start a shared utility script for poking around at the import internals
Nick Coghlan <ncoghlan@gmail.com>
parents:
diff changeset
8 def _dump_state(args):
e91a8467328b Start a shared utility script for poking around at the import internals
Nick Coghlan <ncoghlan@gmail.com>
parents:
diff changeset
9 print(sys.version)
76623
00221c8b7c86 Better control when dumping import state
Nick Coghlan <ncoghlan@gmail.com>
parents: 76553
diff changeset
10 for name in args.attributes:
00221c8b7c86 Better control when dumping import state
Nick Coghlan <ncoghlan@gmail.com>
parents: 76553
diff changeset
11 print("sys.{}:".format(name))
00221c8b7c86 Better control when dumping import state
Nick Coghlan <ncoghlan@gmail.com>
parents: 76553
diff changeset
12 pprint(getattr(sys, name))
00221c8b7c86 Better control when dumping import state
Nick Coghlan <ncoghlan@gmail.com>
parents: 76553
diff changeset
13
00221c8b7c86 Better control when dumping import state
Nick Coghlan <ncoghlan@gmail.com>
parents: 76553
diff changeset
14 def _add_dump_args(cmd):
00221c8b7c86 Better control when dumping import state
Nick Coghlan <ncoghlan@gmail.com>
parents: 76553
diff changeset
15 cmd.add_argument("attributes", metavar="ATTR", nargs="+",
00221c8b7c86 Better control when dumping import state
Nick Coghlan <ncoghlan@gmail.com>
parents: 76553
diff changeset
16 help="sys module attribute to display")
76553
e91a8467328b Start a shared utility script for poking around at the import internals
Nick Coghlan <ncoghlan@gmail.com>
parents:
diff changeset
17
e91a8467328b Start a shared utility script for poking around at the import internals
Nick Coghlan <ncoghlan@gmail.com>
parents:
diff changeset
18 COMMANDS = (
76623
00221c8b7c86 Better control when dumping import state
Nick Coghlan <ncoghlan@gmail.com>
parents: 76553
diff changeset
19 ("dump", "Dump import state", _dump_state, _add_dump_args),
76553
e91a8467328b Start a shared utility script for poking around at the import internals
Nick Coghlan <ncoghlan@gmail.com>
parents:
diff changeset
20 )
e91a8467328b Start a shared utility script for poking around at the import internals
Nick Coghlan <ncoghlan@gmail.com>
parents:
diff changeset
21
e91a8467328b Start a shared utility script for poking around at the import internals
Nick Coghlan <ncoghlan@gmail.com>
parents:
diff changeset
22 def _make_parser():
e91a8467328b Start a shared utility script for poking around at the import internals
Nick Coghlan <ncoghlan@gmail.com>
parents:
diff changeset
23 parser = argparse.ArgumentParser()
e91a8467328b Start a shared utility script for poking around at the import internals
Nick Coghlan <ncoghlan@gmail.com>
parents:
diff changeset
24 sub = parser.add_subparsers(title="Commands")
76623
00221c8b7c86 Better control when dumping import state
Nick Coghlan <ncoghlan@gmail.com>
parents: 76553
diff changeset
25 for name, description, implementation, add_args in COMMANDS:
76553
e91a8467328b Start a shared utility script for poking around at the import internals
Nick Coghlan <ncoghlan@gmail.com>
parents:
diff changeset
26 cmd = sub.add_parser(name, help=description)
e91a8467328b Start a shared utility script for poking around at the import internals
Nick Coghlan <ncoghlan@gmail.com>
parents:
diff changeset
27 cmd.set_defaults(command=implementation)
76623
00221c8b7c86 Better control when dumping import state
Nick Coghlan <ncoghlan@gmail.com>
parents: 76553
diff changeset
28 add_args(cmd)
76553
e91a8467328b Start a shared utility script for poking around at the import internals
Nick Coghlan <ncoghlan@gmail.com>
parents:
diff changeset
29 return parser
e91a8467328b Start a shared utility script for poking around at the import internals
Nick Coghlan <ncoghlan@gmail.com>
parents:
diff changeset
30
e91a8467328b Start a shared utility script for poking around at the import internals
Nick Coghlan <ncoghlan@gmail.com>
parents:
diff changeset
31 def main(args):
e91a8467328b Start a shared utility script for poking around at the import internals
Nick Coghlan <ncoghlan@gmail.com>
parents:
diff changeset
32 parser = _make_parser()
e91a8467328b Start a shared utility script for poking around at the import internals
Nick Coghlan <ncoghlan@gmail.com>
parents:
diff changeset
33 args = parser.parse_args(args)
e91a8467328b Start a shared utility script for poking around at the import internals
Nick Coghlan <ncoghlan@gmail.com>
parents:
diff changeset
34 return args.command(args)
e91a8467328b Start a shared utility script for poking around at the import internals
Nick Coghlan <ncoghlan@gmail.com>
parents:
diff changeset
35
e91a8467328b Start a shared utility script for poking around at the import internals
Nick Coghlan <ncoghlan@gmail.com>
parents:
diff changeset
36 if __name__ == "__main__":
e91a8467328b Start a shared utility script for poking around at the import internals
Nick Coghlan <ncoghlan@gmail.com>
parents:
diff changeset
37 sys.exit(main(sys.argv[1:]))