I have a class that loads all the resources into memory needed for my application (mostly images).
Then, multiple threads must access these resources through this class. I do not want each instance to reload all resources, so I decided to use the Singleton template. I did it like this:
class DataContainer(object):
_instance = None
_lock = threading.Lock()
_initialised = True
def __new__(cls, *args, **kwargs):
with cls._lock:
if not cls._instance:
cls._initialised = False
cls._instance = object.__new__(cls, *args, **kwargs)
return cls._instance
def __init__(self, map_name = None):
if self._initialised:
return
self._initialised = True
This works great if I don't use multiple threads. But when using multiple threads, each thread has a different instance. Thus, using 4 threads, each of them creates a new instance. I want all threads to use the same instance of this class, so resources are only loaded once into memory.
I also tried to do this in the same module where the class is defined, but outside the class definition:
def getDataContainer():
global dataContainer
return dataContainer
dataContainer = DataContainer()
- .
python, , plz ,