 Merged revisions 66457-66459,66465-66468,66483-66485,66487-66491 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/trunk
........
r66457 | antoine.pitrou | 2008-09-13 15:30:30 -0500 (Sat, 13 Sep 2008) | 5 lines
Issue #3850: Misc/find_recursionlimit.py was broken.
Reviewed by A.M. Kuchling.
........
r66458 | benjamin.peterson | 2008-09-13 17:54:43 -0500 (Sat, 13 Sep 2008) | 1 line
fix a name issue; note all doc files should be encoded in utf8
........
r66459 | benjamin.peterson | 2008-09-14 11:02:22 -0500 (Sun, 14 Sep 2008) | 1 line
clarify that radix for int is not 'guessed'
........
r66465 | skip.montanaro | 2008-09-14 21:03:05 -0500 (Sun, 14 Sep 2008) | 3 lines
Review usage. Fix a mistake in the new-style class definition. Add a
couple new definitions (CPython and virtual machine).
........
r66466 | skip.montanaro | 2008-09-14 21:19:53 -0500 (Sun, 14 Sep 2008) | 2 lines
Pick up a few more definitions from the glossary on the wiki.
........
r66467 | benjamin.peterson | 2008-09-14 21:53:23 -0500 (Sun, 14 Sep 2008) | 1 line
mention that object.__init__ no longer takes arbitrary args and kwargs
........
r66468 | andrew.kuchling | 2008-09-15 08:08:32 -0500 (Mon, 15 Sep 2008) | 1 line
Rewrite item a bit
........
r66483 | georg.brandl | 2008-09-16 05:17:45 -0500 (Tue, 16 Sep 2008) | 2 lines
Fix typo.
........
r66484 | benjamin.peterson | 2008-09-16 16:20:28 -0500 (Tue, 16 Sep 2008) | 2 lines
be less wordy
........
r66485 | georg.brandl | 2008-09-17 03:45:54 -0500 (Wed, 17 Sep 2008) | 2 lines
#3888: add some deprecated modules in whatsnew.
........
r66487 | skip.montanaro | 2008-09-17 06:50:36 -0500 (Wed, 17 Sep 2008) | 2 lines
usage
........
r66488 | andrew.kuchling | 2008-09-17 07:57:04 -0500 (Wed, 17 Sep 2008) | 1 line
Markup fixes
........
r66489 | andrew.kuchling | 2008-09-17 07:58:22 -0500 (Wed, 17 Sep 2008) | 2 lines
Remove comment about improvement: pystone is about the same, and
the improvements seem to be difficult to quantify
........
r66490 | andrew.kuchling | 2008-09-17 08:04:53 -0500 (Wed, 17 Sep 2008) | 1 line
Note sqlite3 version; move item
........
r66491 | benjamin.peterson | 2008-09-17 16:54:56 -0500 (Wed, 17 Sep 2008) | 1 line
document compileall command flags
........
18 years ago  Merged revisions 66457-66459,66465-66468,66483-66485,66487-66491 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/trunk
........
r66457 | antoine.pitrou | 2008-09-13 15:30:30 -0500 (Sat, 13 Sep 2008) | 5 lines
Issue #3850: Misc/find_recursionlimit.py was broken.
Reviewed by A.M. Kuchling.
........
r66458 | benjamin.peterson | 2008-09-13 17:54:43 -0500 (Sat, 13 Sep 2008) | 1 line
fix a name issue; note all doc files should be encoded in utf8
........
r66459 | benjamin.peterson | 2008-09-14 11:02:22 -0500 (Sun, 14 Sep 2008) | 1 line
clarify that radix for int is not 'guessed'
........
r66465 | skip.montanaro | 2008-09-14 21:03:05 -0500 (Sun, 14 Sep 2008) | 3 lines
Review usage. Fix a mistake in the new-style class definition. Add a
couple new definitions (CPython and virtual machine).
........
r66466 | skip.montanaro | 2008-09-14 21:19:53 -0500 (Sun, 14 Sep 2008) | 2 lines
Pick up a few more definitions from the glossary on the wiki.
........
r66467 | benjamin.peterson | 2008-09-14 21:53:23 -0500 (Sun, 14 Sep 2008) | 1 line
mention that object.__init__ no longer takes arbitrary args and kwargs
........
r66468 | andrew.kuchling | 2008-09-15 08:08:32 -0500 (Mon, 15 Sep 2008) | 1 line
Rewrite item a bit
........
r66483 | georg.brandl | 2008-09-16 05:17:45 -0500 (Tue, 16 Sep 2008) | 2 lines
Fix typo.
........
r66484 | benjamin.peterson | 2008-09-16 16:20:28 -0500 (Tue, 16 Sep 2008) | 2 lines
be less wordy
........
r66485 | georg.brandl | 2008-09-17 03:45:54 -0500 (Wed, 17 Sep 2008) | 2 lines
#3888: add some deprecated modules in whatsnew.
........
r66487 | skip.montanaro | 2008-09-17 06:50:36 -0500 (Wed, 17 Sep 2008) | 2 lines
usage
........
r66488 | andrew.kuchling | 2008-09-17 07:57:04 -0500 (Wed, 17 Sep 2008) | 1 line
Markup fixes
........
r66489 | andrew.kuchling | 2008-09-17 07:58:22 -0500 (Wed, 17 Sep 2008) | 2 lines
Remove comment about improvement: pystone is about the same, and
the improvements seem to be difficult to quantify
........
r66490 | andrew.kuchling | 2008-09-17 08:04:53 -0500 (Wed, 17 Sep 2008) | 1 line
Note sqlite3 version; move item
........
r66491 | benjamin.peterson | 2008-09-17 16:54:56 -0500 (Wed, 17 Sep 2008) | 1 line
document compileall command flags
........
18 years ago  Merged revisions 66457-66459,66465-66468,66483-66485,66487-66491 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/trunk
........
r66457 | antoine.pitrou | 2008-09-13 15:30:30 -0500 (Sat, 13 Sep 2008) | 5 lines
Issue #3850: Misc/find_recursionlimit.py was broken.
Reviewed by A.M. Kuchling.
........
r66458 | benjamin.peterson | 2008-09-13 17:54:43 -0500 (Sat, 13 Sep 2008) | 1 line
fix a name issue; note all doc files should be encoded in utf8
........
r66459 | benjamin.peterson | 2008-09-14 11:02:22 -0500 (Sun, 14 Sep 2008) | 1 line
clarify that radix for int is not 'guessed'
........
r66465 | skip.montanaro | 2008-09-14 21:03:05 -0500 (Sun, 14 Sep 2008) | 3 lines
Review usage. Fix a mistake in the new-style class definition. Add a
couple new definitions (CPython and virtual machine).
........
r66466 | skip.montanaro | 2008-09-14 21:19:53 -0500 (Sun, 14 Sep 2008) | 2 lines
Pick up a few more definitions from the glossary on the wiki.
........
r66467 | benjamin.peterson | 2008-09-14 21:53:23 -0500 (Sun, 14 Sep 2008) | 1 line
mention that object.__init__ no longer takes arbitrary args and kwargs
........
r66468 | andrew.kuchling | 2008-09-15 08:08:32 -0500 (Mon, 15 Sep 2008) | 1 line
Rewrite item a bit
........
r66483 | georg.brandl | 2008-09-16 05:17:45 -0500 (Tue, 16 Sep 2008) | 2 lines
Fix typo.
........
r66484 | benjamin.peterson | 2008-09-16 16:20:28 -0500 (Tue, 16 Sep 2008) | 2 lines
be less wordy
........
r66485 | georg.brandl | 2008-09-17 03:45:54 -0500 (Wed, 17 Sep 2008) | 2 lines
#3888: add some deprecated modules in whatsnew.
........
r66487 | skip.montanaro | 2008-09-17 06:50:36 -0500 (Wed, 17 Sep 2008) | 2 lines
usage
........
r66488 | andrew.kuchling | 2008-09-17 07:57:04 -0500 (Wed, 17 Sep 2008) | 1 line
Markup fixes
........
r66489 | andrew.kuchling | 2008-09-17 07:58:22 -0500 (Wed, 17 Sep 2008) | 2 lines
Remove comment about improvement: pystone is about the same, and
the improvements seem to be difficult to quantify
........
r66490 | andrew.kuchling | 2008-09-17 08:04:53 -0500 (Wed, 17 Sep 2008) | 1 line
Note sqlite3 version; move item
........
r66491 | benjamin.peterson | 2008-09-17 16:54:56 -0500 (Wed, 17 Sep 2008) | 1 line
document compileall command flags
........
18 years ago  Merged revisions 66457-66459,66465-66468,66483-66485,66487-66491 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/trunk
........
r66457 | antoine.pitrou | 2008-09-13 15:30:30 -0500 (Sat, 13 Sep 2008) | 5 lines
Issue #3850: Misc/find_recursionlimit.py was broken.
Reviewed by A.M. Kuchling.
........
r66458 | benjamin.peterson | 2008-09-13 17:54:43 -0500 (Sat, 13 Sep 2008) | 1 line
fix a name issue; note all doc files should be encoded in utf8
........
r66459 | benjamin.peterson | 2008-09-14 11:02:22 -0500 (Sun, 14 Sep 2008) | 1 line
clarify that radix for int is not 'guessed'
........
r66465 | skip.montanaro | 2008-09-14 21:03:05 -0500 (Sun, 14 Sep 2008) | 3 lines
Review usage. Fix a mistake in the new-style class definition. Add a
couple new definitions (CPython and virtual machine).
........
r66466 | skip.montanaro | 2008-09-14 21:19:53 -0500 (Sun, 14 Sep 2008) | 2 lines
Pick up a few more definitions from the glossary on the wiki.
........
r66467 | benjamin.peterson | 2008-09-14 21:53:23 -0500 (Sun, 14 Sep 2008) | 1 line
mention that object.__init__ no longer takes arbitrary args and kwargs
........
r66468 | andrew.kuchling | 2008-09-15 08:08:32 -0500 (Mon, 15 Sep 2008) | 1 line
Rewrite item a bit
........
r66483 | georg.brandl | 2008-09-16 05:17:45 -0500 (Tue, 16 Sep 2008) | 2 lines
Fix typo.
........
r66484 | benjamin.peterson | 2008-09-16 16:20:28 -0500 (Tue, 16 Sep 2008) | 2 lines
be less wordy
........
r66485 | georg.brandl | 2008-09-17 03:45:54 -0500 (Wed, 17 Sep 2008) | 2 lines
#3888: add some deprecated modules in whatsnew.
........
r66487 | skip.montanaro | 2008-09-17 06:50:36 -0500 (Wed, 17 Sep 2008) | 2 lines
usage
........
r66488 | andrew.kuchling | 2008-09-17 07:57:04 -0500 (Wed, 17 Sep 2008) | 1 line
Markup fixes
........
r66489 | andrew.kuchling | 2008-09-17 07:58:22 -0500 (Wed, 17 Sep 2008) | 2 lines
Remove comment about improvement: pystone is about the same, and
the improvements seem to be difficult to quantify
........
r66490 | andrew.kuchling | 2008-09-17 08:04:53 -0500 (Wed, 17 Sep 2008) | 1 line
Note sqlite3 version; move item
........
r66491 | benjamin.peterson | 2008-09-17 16:54:56 -0500 (Wed, 17 Sep 2008) | 1 line
document compileall command flags
........
18 years ago  Merged revisions 66457-66459,66465-66468,66483-66485,66487-66491 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/trunk
........
r66457 | antoine.pitrou | 2008-09-13 15:30:30 -0500 (Sat, 13 Sep 2008) | 5 lines
Issue #3850: Misc/find_recursionlimit.py was broken.
Reviewed by A.M. Kuchling.
........
r66458 | benjamin.peterson | 2008-09-13 17:54:43 -0500 (Sat, 13 Sep 2008) | 1 line
fix a name issue; note all doc files should be encoded in utf8
........
r66459 | benjamin.peterson | 2008-09-14 11:02:22 -0500 (Sun, 14 Sep 2008) | 1 line
clarify that radix for int is not 'guessed'
........
r66465 | skip.montanaro | 2008-09-14 21:03:05 -0500 (Sun, 14 Sep 2008) | 3 lines
Review usage. Fix a mistake in the new-style class definition. Add a
couple new definitions (CPython and virtual machine).
........
r66466 | skip.montanaro | 2008-09-14 21:19:53 -0500 (Sun, 14 Sep 2008) | 2 lines
Pick up a few more definitions from the glossary on the wiki.
........
r66467 | benjamin.peterson | 2008-09-14 21:53:23 -0500 (Sun, 14 Sep 2008) | 1 line
mention that object.__init__ no longer takes arbitrary args and kwargs
........
r66468 | andrew.kuchling | 2008-09-15 08:08:32 -0500 (Mon, 15 Sep 2008) | 1 line
Rewrite item a bit
........
r66483 | georg.brandl | 2008-09-16 05:17:45 -0500 (Tue, 16 Sep 2008) | 2 lines
Fix typo.
........
r66484 | benjamin.peterson | 2008-09-16 16:20:28 -0500 (Tue, 16 Sep 2008) | 2 lines
be less wordy
........
r66485 | georg.brandl | 2008-09-17 03:45:54 -0500 (Wed, 17 Sep 2008) | 2 lines
#3888: add some deprecated modules in whatsnew.
........
r66487 | skip.montanaro | 2008-09-17 06:50:36 -0500 (Wed, 17 Sep 2008) | 2 lines
usage
........
r66488 | andrew.kuchling | 2008-09-17 07:57:04 -0500 (Wed, 17 Sep 2008) | 1 line
Markup fixes
........
r66489 | andrew.kuchling | 2008-09-17 07:58:22 -0500 (Wed, 17 Sep 2008) | 2 lines
Remove comment about improvement: pystone is about the same, and
the improvements seem to be difficult to quantify
........
r66490 | andrew.kuchling | 2008-09-17 08:04:53 -0500 (Wed, 17 Sep 2008) | 1 line
Note sqlite3 version; move item
........
r66491 | benjamin.peterson | 2008-09-17 16:54:56 -0500 (Wed, 17 Sep 2008) | 1 line
document compileall command flags
........
18 years ago |
|
#! /usr/bin/env python3"""Find the maximum recursion limit that prevents interpreter termination.
This script finds the maximum safe recursion limit on a particularplatform. If you need to change the recursion limit on your system,this script will tell you a safe upper bound. To use the new limit,call sys.setrecursionlimit().
This module implements several ways to create infinite recursion inPython. Different implementations end up pushing different numbers ofC stack frames, depending on how many calls through Python's abstractC API occur.
After each round of tests, it prints a message:"Limit of NNNN is fine".
The highest printed value of "NNNN" is therefore the highest potentiallysafe limit for your system (which depends on the OS, architecture, but alsothe compilation flags). Please note that it is practically impossible totest all possible recursion paths in the interpreter, so the results ofthis test should not be trusted blindly -- although they give a good hintof which values are reasonable.
NOTE: When the C stack space allocated by your system is exceeded dueto excessive recursion, exact behaviour depends on the platform, althoughthe interpreter will always fail in a likely brutal way: either asegmentation fault, a MemoryError, or just a silent abort.
NB: A program that does not use __methods__ can set a higher limit."""
import sysimport itertools
class RecursiveBlowup1: def __init__(self): self.__init__()
def test_init(): return RecursiveBlowup1()
class RecursiveBlowup2: def __repr__(self): return repr(self)
def test_repr(): return repr(RecursiveBlowup2())
class RecursiveBlowup4: def __add__(self, x): return x + self
def test_add(): return RecursiveBlowup4() + RecursiveBlowup4()
class RecursiveBlowup5: def __getattr__(self, attr): return getattr(self, attr)
def test_getattr(): return RecursiveBlowup5().attr
class RecursiveBlowup6: def __getitem__(self, item): return self[item - 2] + self[item - 1]
def test_getitem(): return RecursiveBlowup6()[5]
def test_recurse(): return test_recurse()
def test_cpickle(_cache={}): import io try: import _pickle except ImportError: print("cannot import _pickle, skipped!") return k, l = None, None for n in itertools.count(): try: l = _cache[n] continue # Already tried and it works, let's save some time except KeyError: for i in range(100): l = [k, l] k = {i: l} _pickle.Pickler(io.BytesIO(), protocol=-1).dump(l) _cache[n] = l
def check_limit(n, test_func_name): sys.setrecursionlimit(n) if test_func_name.startswith("test_"): print(test_func_name[5:]) else: print(test_func_name) test_func = globals()[test_func_name] try: test_func() # AttributeError can be raised because of the way e.g. PyDict_GetItem() # silences all exceptions and returns NULL, which is usually interpreted # as "missing attribute". except (RuntimeError, AttributeError): pass else: print("Yikes!")
limit = 1000while 1: check_limit(limit, "test_recurse") check_limit(limit, "test_add") check_limit(limit, "test_repr") check_limit(limit, "test_init") check_limit(limit, "test_getattr") check_limit(limit, "test_getitem") check_limit(limit, "test_cpickle") print("Limit of %d is fine" % limit) limit = limit + 100
|