STINNER Victor <victor.stin...@gmail.com> added the comment:

The performance bottleneck of warnings.warn() is the dance between the C 
_warnings module and the Python warnings module. The C code retrieves many 
attributes, like warnings.filters, at each call, and does conversion from 
Python objects to C objects.

There is already a mecanism to invalidate a "cache" in the C module: 
warnings._filters_mutated() is called by warnings.filterwarnings() for example.

Maybe the C module could convert all filters at once into an efficient C 
structure, but throw this away once on cache invalidation.

The problem is that I'm not sure that it's ok to implement such deeper cache at 
C level. Is it part of the warnings "semantics" to allow users to modify 
directly warnings.filters? Must the C module always lookup in sys.modules if 
the 'warnings' modules didn't change?

Outside test_warnings, do you know an use case where lookup for the 'warnings' 
module and 'warnings.filters' must be done at *each* warnings.warn() call?

----------

_______________________________________
Python tracker <rep...@bugs.python.org>
<https://bugs.python.org/issue27535>
_______________________________________
_______________________________________________
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com

Reply via email to