gpt4 book ai didi

python - 每次重新加载python模块时如何避免计算

转载 作者:太空狗 更新时间:2023-10-29 22:00:29 25 4
gpt4 key购买 nike

我有一个 python 模块,它使用了一个巨大的字典全局变量,目前我将计算代码放在顶部,每次第一次导入或重新加载模块都需要超过一分钟,这是完全不能接受的。如何将计算结果保存在某处,以便下一次导入/重新加载时不必计算它?我尝试了 cPickle,但是从文件 (1.3M) 加载字典变量所花费的时间与计算时间大致相同。

要提供有关我的问题的更多信息,

FD = FreqDist(word for word in brown.words()) # this line of code takes 1 min

最佳答案

澄清一下:模块主体中的代码不会在每次导入模块时执行 - 它只运行一次,之后的导入会找到已经创建的模块,而不是重新创建它。查看 sys.modules 以查看缓存模块的列表。

但是,如果您的问题是程序运行后第一次导入所花费的时间,您可能需要使用 python 字典以外的其他方法。可能最好是使用磁盘形式,例如 sqlite 数据库,dbm 模块之一。

对于界面中的最小更改,shelve 模块可能是您的最佳选择 - 这在 dbm 模块之间放置了一个非常透明的界面,使它们像任意 python 字典一样工作,允许存储任何可 picklable 值。这是一个例子:

# Create dict with a million items:
import shelve
d = shelve.open('path/to/my_persistant_dict')
d.update(('key%d' % x, x) for x in xrange(1000000))
d.close()

然后在接下来的过程中,使用它。应该不会有太大的延迟,因为只对磁盘上请求的 key 执行查找,因此不必将所有内容都加载到内存中:

>>> d = shelve.open('path/to/my_persistant_dict')
>>> print d['key99999']
99999

它比真正的字典慢一点,如果你做一些需要所有键的事情(例如尝试打印它),它加载仍然需要很长时间,但可能会解决你的问题。

关于python - 每次重新加载python模块时如何避免计算,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/195626/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com