Fix: use sys.modules.copy() to avoid RuntimeError

use sys.modules.copy() to avoid "RuntimeError: dictionary changed size during iteration"
see https://github.com/python/cpython/issues/89516
and https://docs.python.org/3.10/library/sys.html#sys.modules

close https://github.com/searxng/searxng/issues/1342
This commit is contained in:
Alexandre Flament 2022-06-18 07:38:36 +02:00
parent a7b0b2ecbf
commit 5bcbec9b06

View file

@ -149,7 +149,11 @@ def set_loggers(engine, engine_name):
engine.logger = logger.getChild(engine_name) engine.logger = logger.getChild(engine_name)
# the engine may have load some other engines # the engine may have load some other engines
# may sure the logger is initialized # may sure the logger is initialized
for module_name, module in sys.modules.items(): # use sys.modules.copy() to avoid "RuntimeError: dictionary changed size during iteration"
# see https://github.com/python/cpython/issues/89516
# and https://docs.python.org/3.10/library/sys.html#sys.modules
modules = sys.modules.copy()
for module_name, module in modules.items():
if ( if (
module_name.startswith("searx.engines") module_name.startswith("searx.engines")
and module_name != "searx.engines.__init__" and module_name != "searx.engines.__init__"