diff options
author | Vinay Sajip <vinay_sajip@yahoo.co.uk> | 2014-06-01 23:30:48 (GMT) |
---|---|---|
committer | Vinay Sajip <vinay_sajip@yahoo.co.uk> | 2014-06-01 23:30:48 (GMT) |
commit | e81c637bf8042660a76e0c9138c789369f880ccc (patch) | |
tree | e01b4a25d4dd8f24bd9be4aa8b95a72839d3f9d4 | |
parent | d04f699498bdb75804fa83a77c91809aa8c3298d (diff) | |
download | cpython-e81c637bf8042660a76e0c9138c789369f880ccc.zip cpython-e81c637bf8042660a76e0c9138c789369f880ccc.tar.gz cpython-e81c637bf8042660a76e0c9138c789369f880ccc.tar.bz2 |
Updated logging HOWTO section on optimization.
-rw-r--r-- | Doc/howto/logging.rst | 15 |
1 files changed, 15 insertions, 0 deletions
diff --git a/Doc/howto/logging.rst b/Doc/howto/logging.rst index dab58f4..0387bea 100644 --- a/Doc/howto/logging.rst +++ b/Doc/howto/logging.rst @@ -1027,6 +1027,15 @@ You can write code like this:: so that if the logger's threshold is set above ``DEBUG``, the calls to :func:`expensive_func1` and :func:`expensive_func2` are never made. +.. note:: In some cases, :meth:`~Logger.isEnabledFor` can iself be more + expensive than you'd like (e.g. for deeply nested loggers where an explicit + level is only set high up in the logger hierarchy). In such cases (or if you + want to avoid calling a method in tight loops), you can cache the result of a + call to :meth:`~Logger.isEnabledFor` in a local or instance variable, and use + that instead of calling the method each time. Such a cached value would only + need to be recomputed when the logging configuration changes dynamically + while the application is running (which is not all that common). + There are other optimizations which can be made for specific applications which need more precise control over what logging information is collected. Here's a list of things you can do to avoid processing during logging which you don't @@ -1036,6 +1045,12 @@ need: | What you don't want to collect | How to avoid collecting it | +===============================================+========================================+ | Information about where calls were made from. | Set ``logging._srcfile`` to ``None``. | +| | This avoids calling | +| | :func:`sys._getframe`, which may help | +| | to speed up your code in environments | +| | like PyPy (which can't speed up code | +| | that uses :func:`sys._getframe`), if | +| | and when PyPy supports Python 3.x. | +-----------------------------------------------+----------------------------------------+ | Threading information. | Set ``logging.logThreads`` to ``0``. | +-----------------------------------------------+----------------------------------------+ |