[django]一个lib需要在init上加载一个文件,如何在没有init两次的django视图中重用这个lib?

时间:2015-06-11 08:31:19

标签: python django

我正在使用lib通过其IP来获取用户位置 主要代码:

...

datfile = os.path.join(os.path.dirname(__file__), "ipdb.dat")

class IPv4Database(object):
    def __init__(self, filename=None, use_mmap=True):
        print 'IPv4Database init'
        if filename is None:
            filename = datfile
        with open(filename, 'rb') as f:
            if use_mmap and mmap is not None:

        ...

我知道读取文件会花费很多,所以我希望ipdb = IPv4Database()只调用一次,然后在整个django项目中使用ipdb
我首先想要的是将ipdb设置为全局变量,但我知道的唯一方法就是将ipdb = IPv4Database()放到settings。在设置中启动对象是否可以?

另一种方式----缓存: 将文件保存到缓存似乎不太好,__init__仍然需要加载此文件。 所以picklepickle ipdb并保存到缓存中,然后每次需要时都要进行unpickle。我担心文件很大是不好的。

我该怎么办?

1 个答案:

答案 0 :(得分:0)

只需在模块中创建一个变量。

e.g。

文件appname / ipdb.py中的

ipdb = IPv4Database()

...

然后你需要它,你可以做到

from appname.ipdb import ipdb

... do something with ipdb

确保您绝对只需要一个Ip数据库的实例。