正确的mmap使用Python

2024-05-14 03:14:15 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试使用mmap从文件加载字典。 我将用简化的例子来解释我的问题。实际上,我有10个文件,必须在几毫秒内加载(或像加载一样)。在

所以让我们有一个字典-50mb。我的程序应该在1秒内按键找到一个值。在这本字典里搜索不是问题,它可以在不到1秒钟的时间内完成。问题是,当sb将一个输入输入到文本字段并按enter时,程序开始将字典加载到内存中,以便程序能够找到一个键。此加载可能需要几秒钟,但我必须在1秒下获得结果(在按enter键之前无法加载字典)。所以我被推荐使用mmap模块,它应该快得多。在

我在谷歌上找不到一个好例子。我试过了(我知道这是不正确的用法)

def loadDict():
    with open('dict','r+b') as f: # used pickle to save
        fmap = mmap.mmap(f.fileno(),0)
        dictionary = cpickle.load(fmap)
    return dictionary


def search(pattern):
    dictionary = loadDict()
    return dictionary['pattern']

search('apple') <- it still takes many seconds

你能给我一个正确使用mmap的好例子吗?在


Tags: 文件程序searchdictionaryreturn字典def按键
1条回答
网友
1楼 · 发布于 2024-05-14 03:14:15

使用2400000个密钥/值(52.7 MB)对的示例文件,例如:

key1,value1
key2,value2
etc , etc

正在创建示例文件:

^{pr2}$

真正慢的是不得不去构建字典。读取50mb的文件已经足够快了。在这种大小的文本中查找值也足够快。使用它,您将能够在1秒内找到单个值。在

因为我知道我的文件结构,所以我可以使用这个快捷方式。但是,应该根据您的确切文件结构进行调整:

读取文件并手动搜索已知模式(在整个文件中搜索唯一的字符串,然后使用逗号分隔符和换行分隔符)。在

with open("stacktest.txt") as f: 
    bigfile = f.read()
    my_key = "key2399999"
    start = bigfile.find(my_key)
    comma = bigfile[start:start+1000].find(",") + 1
    end = bigfile[start:start+1000].find("\n")
    print bigfile[start+comma:start+end]
    # value2399999

时间安排:平均0.43s

任务完成了吗?在

相关问题 更多 >