如何有效地实例化和销毁python中的类

时间:2015-10-27 00:09:23

标签: python class instantiation destroy

我的类变得复杂,我认为我实例化而不是关闭的方式可能是一个问题...有时程序只是挂起,运行了0.2秒的代码需要15秒。它随机发生,重启似乎解决了它。重新启动程序而不重新启动不会,我使用cntrl + C来停止在CENTOS 7上运行的程序。

这是我的班级布局:

def do_stuff(self):
     pool_class = pools()
     sql_pool_insert = pool_class.generate_sql()
     print "pools done"
     sql_HD_insert = hard_drives(pool_class).generate_sql()
     print "hds done"

class pools
     class devs

class hard_drives(object):
    def __init__(self, **pool_class = pools()**):
        self.drives_table=[]
        self.assigned_drive_names =[]
        self.unassigned_drives_table=[]
        #for each pool, generate drives list actively combining
        for pool in pool_class.pool_name:
            self.drives_table = self.drives_table + pool_class.Vdevs(pool).get_drive_table()

        i=0

在该文件之外,我有我的主程序,它将上面的内容作为众多软件包之一导入。主文件调用上面文件中位于类之上的函数(因为它们使用类),有时主程序在类中使用离散函数。问题是pool和devs类初始化部分是巨大的!在某些情况下运行所有​​代码需要0.7秒,所以我想正确地实例化它并有效地关闭它。以下是主程序的示例:

if (new_pool==1):
            result = mypackage.pools().create_pool(pool_to_create)

我真的觉得我做错了两三件事。我想,也许,我应该在我的主程序中创建一个pool类的实例while循环,然后在循环中的任何地方使用它...然后我会在循环结束时关闭它;循环每0.25秒运行一次。我希望池类在while循环的开始处启动并在结束时关闭。这是一个好方法吗?这个问题同样适用于我使用的Mysql InnoDB游标,这可能是问题的另一个因素,应该如何处理这些游标,以免让游标和类的实例失控?哎呀,也许我应该实例化整个包而不是包中的一个类;即:

with package as MyPackage:
     package.pool()...#do whatever, all inits in the package have run once and you don't have to worry about them running again so long as you use the package object for everything???

也许我只是感到困惑......它归结为......我如何控制何时运行类init函数...它实际上只需要在循环开始时运行,所以循环有新的数据可以使用,然后在其他地方使用...但你看到hard_drives类如何使用pool类...我将如何处理?

0 个答案:

没有答案