我目前正在将一些代码从 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方法是什么?这个解决方案会有什么样的结构?