[New-bugs-announce] [issue6647] warnings.catch_warnings is not thread-safe

Gabriel Genellina report at bugs.python.org
Wed Aug 5 06:53:01 CEST 2009

New submission from Gabriel Genellina <gagsl-py2 at yahoo.com.ar>:

warnings.catch_warnings is a context manager supposed to save and 
restore warnings filters, and optionally record all warnings issued.

But it does so in a completely thread-unsafe way, by replacing the 
module's "showwarning" and "filters" attributes on enter, and restoring 
them on exit. If the __enter__ / __exit__ calls of two threads overlap, 
after leaving the last block the warnings state is not the same as the 
original state, as it should be.

I don't know how to fix this, other than using locks (that could block 
indefinitely) or severely restricting how catch_warnings may be used. 
At least, this issue should be documented.

components: Library (Lib)
files: error-warnings.py
messages: 91301
nosy: gagenellina
severity: normal
status: open
title: warnings.catch_warnings is not thread-safe
type: behavior
versions: Python 2.6, Python 2.7, Python 3.1, Python 3.2
Added file: http://bugs.python.org/file14654/error-warnings.py

Python tracker <report at bugs.python.org>

More information about the New-bugs-announce mailing list