对不起新手初学者程序员质疑一次只运行一个类的实例;现在正努力找到构建代码的正确方法。
我已经研究过但很难找到正确的方法,但关于正确的pythonic方法的许多争论都是模块或Singltons,例如Ensure that only one instance of a class gets run
我有一些代码(python 2.7.2)不断记录3个变量(2个温度和一个压力传感器),然后根据一些逻辑查看变量的趋势,移动一个阀门(如果声明如果为真,则调用模块中的defs散布着大量的全局变量,因为我实际上希望我的所有defs看到相同的数据集并移动相同的阀门)。在这一刻,这一切都在模块文件中正常工作。
但是,实验室中的其他人可以运行我的代码,它需要从通用GUI启动,因此我的代码需要进行线程处理,以便该进程不会占用GUI和命令行。
我开始将代码重新编写成一个Class(带有线程超类),并希望添加一些逻辑,只调用了一个Class的一个实例,因此> 1个线程没有尝试控制同一个阀门。
现在,我发现在python中这并不容易,并且读到“Singletons”的概念很糟糕,并且正在努力寻找如何构建代码的解决方案。
如果有人能指出我正确的方向,我将不胜感激,因为我猜这肯定已经得到了解答。
答案 0 :(得分:1)
您应初始化一个实例并仅访问初始化常量 为了安全起见,如果有人试图创建另一个实例,则引发异常
class Singletone(object):
__initialized = False
def __init__(self):
if Singletone.__initialized:
raise Exception("You can't create more than 1 instance of Singletone")
Singletone.__initialized = True
MY_SINGLETONE_INSTANCE = Singletone()
答案 1 :(得分:-1)
来自http://norvig.com/python-iaq.html:
def singleton(object, instantiated=[]):
"Raise an exception if an object of this class has been instantiated before."
assert object.__class__ not in instantiated, \
"%s is a Singleton class but is already instantiated" % object.__class__
instantiated.append(object.__class__)
class YourClass:
"A singleton class to do something ..."
def __init__(self, args):
singleton(self)
...
不确定如何为多线程应用程序调整它。