需要相同昂贵设置的一组相关功能

时间:2013-08-25 06:52:46

标签: python python-2.7

我目前正在将一些代码从c ++移植到python,这需要将一个非常大的文件加载到内存中并在使用之前进行一些昂贵的设置操作。该代码利用大型查找表来加速时间关键相关函数的执行时间(超过5个函数广泛使用同一个表)。我认为这种情况在代码的单元测试中得到了很好的处理:

class LookupTableTests(object):                                                                   

    @classmethod                                                                                  
    def setup_class(cls):                                                                         
        """Load the lookup table instance used by the rest of the tests.                          
        """                                                                                       
        from fasteval import LookupTable                                                                                                             
        cls.lt = LookupTable.loadfile()                                                       

    @classmethod                                                                                  
    def teardown_class(cls):                                                                      
        """Free the lookup table instance used in these tests.                                    
        """                                                                                       
        cls.lt.close()                                                                            
        cls.lt = None                                                                             

在单元测试的上下文中这对我来说很有意义,我们设置表一次然后运行一堆测试,总体来说这节省了一堆执行时间(加载这个表并进行其他初始化很慢) )。

但是,在单元测试之外,我不确定最好的方法是确保只对使用查找表的整组函数执行一次设置和清理。

我到目前为止最好的想法是定义一个全局,指示是否已执行设置。但这对我来说似乎很丑陋,并且如果在某处抛出未处理的异常,也会引起清理无法正确处理的问题。如果我在c ++中这样做,我想我会尝试使用一些RAII原则并在析构函数中进行清理以帮助我管理资源,但我不知道在python中执行此操作的正确方法。

什么是pythonic方法来处理你有一个相关函数的情况,这些函数都需要相同的设置和清理?这个解决方案有什么样的结构?

1 个答案:

答案 0 :(得分:1)

使用课程。在__init__()中生成查找表,创建使用该表的方法,并让Python解释器执行拆解。