アプリケーションに必要なすべてのリソース (主に画像) をメモリにロードするクラスがあります。
次に、複数のスレッドがこのクラスを介してこれらのリソースにアクセスする必要があります。すべてのインスタンスがすべてのリソースをリロードするのは望ましくないため、Singleton パターンを使用することにしました。私はこのようにしました:
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):
# instance has already been created
if self._initialised:
return
self._initialised = True
# load images
複数のスレッドを使用していない限り、これは正常に機能します。ただし、複数のスレッドを使用すると、すべてのスレッドが異なるインスタンスを持ちます。したがって、4 つのスレッドを使用して、それぞれが新しいインスタンスを作成します。すべてのスレッドがこのクラスの同じインスタンスを使用するようにしたいので、リソースは一度だけメモリにロードされます。
また、クラスが定義されているのと同じモジュールでこれを実行しようとしましたが、クラス定義の外側にありました。
def getDataContainer():
global dataContainer
return dataContainer
dataContainer = DataContainer()
ただし、すべてのスレッドには独自のインスタンスがあります。
私はPythonを初めて使用します。これが間違ったアプローチである場合は、教えてください。助けていただければ幸いです