Issue 6647: warnings.catch_warnings is not thread-safe (original) (raw)

Created on 2009-08-05 04:52 by ggenellina, last changed 2022-04-11 14:56 by admin. This issue is now closed.

Files
File name Uploaded Description Edit
error-warnings.py ggenellina,2009-08-05 04:52 demo code showing the problem
warnings.diff ggenellina,2009-11-15 11:15
Messages (4)
msg91301 - (view) Author: Gabriel Genellina (ggenellina) Date: 2009-08-05 04:52
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.
msg91318 - (view) Author: Antoine Pitrou (pitrou) * (Python committer) Date: 2009-08-05 12:50
Any function whose purpose is to mutate global (non thread-local) state is inherently "thread-unsafe". The only reasonable possibility is to document it as such.
msg95285 - (view) Author: Gabriel Genellina (ggenellina) Date: 2009-11-15 11:15
Document that warnings.catch_warnings is not thread safe.
msg102185 - (view) Author: A.M. Kuchling (akuchling) * (Python committer) Date: 2010-04-02 17:54
Added a warning to 2.x trunk in r79607, and Gabriel's doc change in r79608. This thread-unsafety seems specialized and rarely of great importance, so I used the note:: directive, not warning::.
History
Date User Action Args
2022-04-11 14:56:51 admin set github: 50896
2010-04-02 17:54:34 akuchling set status: open -> closednosy: + akuchlingmessages: + resolution: fixed
2009-11-15 11:15:30 ggenellina set files: + warnings.diffkeywords: + patchmessages: +
2009-08-05 12:50:46 pitrou set nosy: + georg.brandl, pitroumessages: + assignee: georg.brandlcomponents: + Documentation
2009-08-05 04:52:59 ggenellina create