0

对不起新手程序员关于一次只运行一个类的一个实例的问题;现在正在努力寻找构建代码的正确方法。

我已经研究过但很难找到正确的方法,但是关于正确的pythonic方法的很多争论是模块或Singltons,例如确保只运行一个类的一个实例

我有一些代码(python 2.7.2)不断记录 3 个变量(2 个温度和一个压力传感器),然后根据一些查看变量趋势的逻辑,移动一个阀门(如果语句为真,则在有很多全局变量的模块,因为我实际上希望我的所有定义都查看相同的数据集并移动相同的阀门)。目前,这一切在模块文件中都可以正常工作。

但是,为了让实验室中的其他人可以运行我的代码,它需要从通用 GUI 启动,因此我的代码需要线程化,以便该过程不会占用 GUI 和命令行。

我已经开始将代码重写到一个类(带有线程超类)中,并想添加一些逻辑,即只调用了该类的一个实例,这样 >1 线程就不会试图控制同一个阀门.

现在,我发现这在 python 中并不容易,并且读到“单例”的概念很糟糕,并且正在努力寻找如何构建我的代码的解决方案。

如果有人能指出我正确的方向,我将不胜感激,因为我想这一定已经得到了回答。

4

2 回答 2

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()
于 2014-07-09T04:52:46.723 回答
-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)
        ...

不过,不确定您必须如何适应多线程应用程序。

于 2012-12-10T18:48:24.433 回答