gpt4 book ai didi

Python 搁置模块内存消耗

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

我的任务是读取一个 .txt 文件,该文件是各种事件的日志,并将其中一些事件写入字典。

问题是文件有时会超过 3GB。这意味着字典变得太大而无法放入主存。似乎Shelve是解决这个问题的好方法。但是,由于我将不断修改字典,因此我必须启用 writeback 选项。这是我担心的地方 - 教程说这会减慢读/写过程并使用更多内存,但我无法找到有关速度和内存如何受到影响的统计信息。

谁能阐明读/写速度和内存受到的影响有多大,以便我可以决定是使用回写选项还是为了代码效率牺牲一些可读性?

谢谢

最佳答案

对于这种规模的数据库,搁置确实是错误的工具。如果您不需要高可用性客户端/服务器架构,而只想将 TXT 文件转换为本地内存可访问数据库,那么您确实应该使用 ZODB

如果你需要高可用的东西,你当然需要切换到正式的“NoSQL”数据库,其中有很多可供选择。

这是一个简单的示例,说明如何将您的搁置数据库转换为 ZODB 数据库,这将解决您的内存使用/性能问题。

#!/usr/bin/env python
import shelve
import ZODB, ZODB.FileStorage
import transaction
from optparse import OptionParser
import os
import sys
import re

reload(sys)
sys.setdefaultencoding("utf-8")

parser = OptionParser()

parser.add_option("-o", "--output", dest = "out_file", default = False, help ="original shelve database filename")
parser.add_option("-i", "--input", dest = "in_file", default = False, help ="new zodb database filename")

parser.set_defaults()
options, args = parser.parse_args()

if options.in_file == False or options.out_file == False :
print "Need input and output database filenames"
exit(1)

db = shelve.open(options.in_file, writeback=True)
zstorage = ZODB.FileStorage.FileStorage(options.out_file)
zdb = ZODB.DB(zstorage)
zconnection = zdb.open()
newdb = zconnection.root()

for key, value in db.iteritems() :
print "Copying key: " + str(key)
newdb[key] = value

transaction.commit()

关于Python 搁置模块内存消耗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6115100/

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