diff --git a/app/classes.py b/app/classes.py index a93c230..c625165 100644 --- a/app/classes.py +++ b/app/classes.py @@ -1,9 +1,10 @@ # Standard library imports from __future__ import annotations -from dataclasses import dataclass, field +from dataclasses import dataclass from enum import auto, Enum import functools +import threading from typing import NamedTuple # Third party imports @@ -34,12 +35,18 @@ def singleton(cls): """ Make a class a Singleton class (see https://realpython.com/primer-on-python-decorators/#creating-singletons) + + Added locking. """ + lock = threading.Lock() + @functools.wraps(cls) def wrapper_singleton(*args, **kwargs): - if not wrapper_singleton.instance: - wrapper_singleton.instance = cls(*args, **kwargs) + if wrapper_singleton.instance is None: + with lock: + if wrapper_singleton.instance is None: # Check still None + wrapper_singleton.instance = cls(*args, **kwargs) return wrapper_singleton.instance wrapper_singleton.instance = None