在 a.py 类中,它正在获取指标字典的值。我试图将这些值保存到 container.py 中的全局字典变量中,然后在 b.py 中访问它们。
因此,我在container.py中声明了一个名为GlobalContainer的单例,并在其中声明了一个字典。然后,在 a.py 中,我将获取的值添加到该字典中。但是,当我尝试从 b.py 访问单例中的字典时,没有值。经查,发现container.py中GlobalContainer的内存地址不一样。
我需要一个可从 a.py、b.py、c.py 等访问的单个数据存储。我不明白为什么单例地址不同。
容器.py
class Singleton:
def __init__(self, decorated):
self._decorated = decorated
self._initialized = False # Flag for first instance creation
def instance(self):
if not self._initialized:
self._instance = self._decorated()
self._initialized = True
return self._instance
def __call__(self):
raise TypeError('Singletons must be accessed through `instance()`.')
def __instancecheck__(self, inst):
return isinstance(inst, self._decorated)
def __wrap__(self, instance, objtype, wrapper):
# Allow access to class methods using the actual class object (cls)
instance.__getattribute__ = lambda self, name: getattr(objtype, name, self.__dict__[name])
return wrapper(instance)
@Singleton
class GlobalContainer:
containers = {}
def __init__(self):
# No initialization check needed here
print("### GlobalContainer created") # This will print only once
@classmethod
def set_indicators(cls, symbol, indicators):
if symbol not in cls.containers:
cls.containers[symbol] = {'indicators': indicators}
else:
cls.containers[symbol]['indicators'] = indicators
@classmethod
def get_indicators(cls, symbol):
container = cls.containers.get(symbol, {})
return container.get('indicators', None)
在a.py中
GlobalContainer.instance().set_indicators(self.symbol, self.indicators)
在b.py中
GlobalContainer.instance().get_indicators(symbol)
单例init部分中的print('### GlobalContainer created')被执行了两次。我只想创建一个实例并将其用作 GlobalContainer 的全局变量。
“单例”有两个不同的地址,因为您正在执行两个不同的脚本,每个脚本在启动时定义一个新的
GlobalContainers
类。该类不在两个单独的进程之间共享。