This issue tracker has been migrated to GitHub ,
and is currently read-only.
For more information,
see the GitHub FAQs in the Python's Developer Guide.
Created on 2011年07月07日 14:58 by gdr@garethrees.org, last changed 2022年04月11日 14:57 by admin. This issue is now closed.
| Files | ||||
|---|---|---|---|---|
| File name | Uploaded | Description | Edit | |
| issue12514.patch | gdr@garethrees.org, 2011年07月07日 15:58 | review | ||
| Messages (6) | |||
|---|---|---|---|
| msg139978 - (view) | Author: Gareth Rees (gdr@garethrees.org) * (Python triager) | Date: 2011年07月07日 14:58 | |
If you call timeit.timeit and the timed code raises an exception, then garbage collection is disabled. I have verified this in Python 2.7 and 3.2. Here's an interaction with Python 3.2:
Python 3.2 (r32:88445, Jul 7 2011, 15:52:49)
[GCC 4.2.1 (Apple Inc. build 5666) (dot 3)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import timeit, gc
>>> gc.isenabled()
True
>>> timeit.timeit('raise Exception')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/opt/local/Library/Frameworks/Python.framework/Versions/3.2/lib/python3.2/timeit.py", line 228, in timeit
return Timer(stmt, setup, timer).timeit(number)
File "/opt/local/Library/Frameworks/Python.framework/Versions/3.2/lib/python3.2/timeit.py", line 194, in timeit
timing = self.inner(it, self.timer)
File "<timeit-src>", line 6, in inner
Exception
>>> gc.isenabled()
False
The problem is with the following code in Lib/timeit.py (lines 192–196):
gcold = gc.isenabled()
gc.disable()
timing = self.inner(it, self.timer)
if gcold:
gc.enable()
This should be changed to something like this:
gcold = gc.isenabled()
gc.disable()
try:
timing = self.inner(it, self.timer)
finally:
if gcold:
gc.enable()
|
|||
| msg139980 - (view) | Author: Gareth Rees (gdr@garethrees.org) * (Python triager) | Date: 2011年07月07日 15:58 | |
Patch attached. |
|||
| msg139981 - (view) | Author: Raymond Hettinger (rhettinger) * (Python committer) | Date: 2011年07月07日 16:33 | |
Thank you. The patch looks correct. I will apply it as soon as I get a chance. |
|||
| msg141334 - (view) | Author: Roundup Robot (python-dev) (Python triager) | Date: 2011年07月29日 06:56 | |
New changeset 56e7b42089c8 by Raymond Hettinger in branch '2.7': Issue 12514: Use try/finally to assure that timeit restores GC when done. http://hg.python.org/cpython/rev/56e7b42089c8 |
|||
| msg141335 - (view) | Author: Roundup Robot (python-dev) (Python triager) | Date: 2011年07月29日 07:08 | |
New changeset 1cdb281a78ce by Raymond Hettinger in branch '3.2': Issue 12514: Use try/finally to assure that timeit restores GC when done. http://hg.python.org/cpython/rev/1cdb281a78ce New changeset 7df53f5788a4 by Raymond Hettinger in branch 'default': Issue 12514: Use try/finally to assure that timeit restores GC when done. http://hg.python.org/cpython/rev/7df53f5788a4 |
|||
| msg141336 - (view) | Author: Raymond Hettinger (rhettinger) * (Python committer) | Date: 2011年07月29日 07:09 | |
Thanks for the bug report and patch. |
|||
| History | |||
|---|---|---|---|
| Date | User | Action | Args |
| 2022年04月11日 14:57:19 | admin | set | github: 56723 |
| 2011年07月29日 07:09:15 | rhettinger | set | status: open -> closed resolution: fixed messages: + msg141336 |
| 2011年07月29日 07:08:28 | python-dev | set | messages: + msg141335 |
| 2011年07月29日 06:56:48 | python-dev | set | nosy:
+ python-dev messages: + msg141334 |
| 2011年07月07日 16:33:44 | rhettinger | set | messages: + msg139981 |
| 2011年07月07日 16:32:19 | rhettinger | set | assignee: rhettinger nosy: + rhettinger |
| 2011年07月07日 15:58:02 | gdr@garethrees.org | set | files:
+ issue12514.patch keywords: + patch messages: + msg139980 |
| 2011年07月07日 14:58:52 | gdr@garethrees.org | create | |