Recovered lost code from other libraries
This commit is contained in:
31
python/singelton.py
Normal file
31
python/singelton.py
Normal file
@@ -0,0 +1,31 @@
|
||||
#
|
||||
# Last Change: 2026-03-18
|
||||
#
|
||||
|
||||
import threading
|
||||
|
||||
class Singleton:
|
||||
"""
|
||||
A thread lock protected singleton,
|
||||
makes any inherting class into a singlton.
|
||||
|
||||
The SINGLETON_LOCK object is shared between all inherited children,
|
||||
unless they initiate their own using the 'decouple_lock_from_parent_class' method.
|
||||
"""
|
||||
|
||||
SINGLETON_INSTANCE = None
|
||||
SINGLETON_LOCK = threading.Lock()
|
||||
|
||||
@classmethod
|
||||
def decouple_lock_from_parent_class( cls ):
|
||||
if cls.SINGLETON_LOCK is not super().SINGLETON_LOCK: return
|
||||
cls.SINGLETON_LOCK = threading.Lock()
|
||||
|
||||
def __new__( cls, *args, **kwargs ):
|
||||
if cls.SINGLETON_INSTANCE: return cls.SINGLETON_INSTANCE
|
||||
|
||||
with cls.SINGLETON_LOCK:
|
||||
if cls.SINGLETON_INSTANCE: return cls.SINGLETON_INSTANCE
|
||||
cls.SINGLETON_INSTANCE = super().__new__( cls, *args, **kwargs )
|
||||
|
||||
return cls.SINGLETON_INSTANCE
|
||||
Reference in New Issue
Block a user