Pergunta

Alguém sabe se o Python shelve O módulo usa IO com mapeamento de memória?

Talvez essa pergunta seja um pouco enganadora. Eu percebo isso shelve usa um módulo subjacente ao estilo DBM para fazer seu trabalho sujo. Quais são as chances que o módulo subjacente usa mmap?

Estou prototipando um armazenamento de dados e, embora percebo que a otimização prematura geralmente é desaprovada, isso pode realmente me ajudar a entender as compensações envolvidas no meu design.

Foi útil?

Solução

Existir dbm As implementações na biblioteca padrão do Python usam todas as E/S "normais", não o mapeamento de memória. Você precisará codificar o seu próprio dbmimplementação de ish com mapeamento de memória e integrá -lo com shelve (diretamente, ou, mais produtivamente, através anydbm).

Outras dicas

Não tenho certeza do que você está tentando aprender fazendo essa pergunta, pois você já parece saber a resposta: depende da loja DBM real que está sendo usada. Alguns deles usarão o MMAP - espero que tudo, menos o Dumbdbm, use o MMAP - mas e daí? A sobrecarga em Shelve quase certamente não está na escolha do Mmap-Versus-Fileio, mas na operação de decapagem. Você não pode MMAP o arquivo DBM de maneira sensata em ambos os casos, pois o módulo DBM pode ter seu próprio bloqueio extravagante (e pode não ser um único arquivo de qualquer maneira, como quando usa o BSDDB.)

Se você está apenas procurando inspiração para o seu próprio armazenamento de dados, bem, não olhe para Shelve, pois tudo o que faz é pickle-and-pass-sempre para outro armazenamento de dados.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top