Closed
Description
Right now this function is not optimal. Source:
def getHandlerNames():
"""
Return all known handler names as an immutable set.
"""
result = set(_handlers.keys())
return frozenset(result)
Why? _handlers.keys()
already returns set
-like thing, so there's no need to use extra set()
It can be simplified to:
def getHandlerNames():
"""
Return all known handler names as an immutable set.
"""
return frozenset(_handlers.keys())
This simple benchmark (with only two handlers) gives a noticable improvement:
import logging
# create logger
logger = logging.getLogger('simple_example')
logger.setLevel(logging.DEBUG)
# create formatter
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
# create two handlers
ch = logging.StreamHandler()
ch.setLevel(logging.DEBUG)
ch.setFormatter(formatter)
logger.addHandler(ch)
fl = logging.FileHandler('./log.txt')
fl.setLevel(logging.DEBUG)
fl.setFormatter(formatter)
logger.addHandler(fl)
Before:
(.venv) ~/Desktop/cpython main ✗
» pyperf timeit --setup 'import ex; l = ex.logging' 'l.getHandlerNames()'
.....................
Mean +- std dev: 2.13 us +- 0.02 us
After:
(.venv) ~/Desktop/cpython main ✗
» pyperf timeit --setup 'import ex; l = ex.logging' 'l.getHandlerNames()'
.....................
Mean +- std dev: 2.04 us +- 0.02 us
So, I think we should make this change :)
PR is incoming.