From 5bcbec9b061b02900dbd8b9751f68bbb5687247d Mon Sep 17 00:00:00 2001 From: Alexandre Flament Date: Sat, 18 Jun 2022 07:38:36 +0200 Subject: [PATCH] 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 --- searx/engines/__init__.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/searx/engines/__init__.py b/searx/engines/__init__.py index ae132f48d..3fb0bcfb1 100644 --- a/searx/engines/__init__.py +++ b/searx/engines/__init__.py @@ -149,7 +149,11 @@ def set_loggers(engine, engine_name): engine.logger = logger.getChild(engine_name) # the engine may have load some other engines # 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 ( module_name.startswith("searx.engines") and module_name != "searx.engines.__init__"