Existe uma maneira fácil de usar um tempfile python em uma prateleira (e certifique-se que limpa-se para cima)?

StackOverflow https://stackoverflow.com/questions/1298037

  •  18-09-2019
  •  | 
  •  

Pergunta

Basicamente, eu quero um tamanho infinito (mais precisamente, do disco rígido em vez de memória ligados) dict em um programa python que estou escrevendo. Parece que o tempfile e módulos Shelve são naturalmente adequadas para isso, no entanto, eu não posso ver como usá-los juntos em uma maneira segura. Eu quero o tempfile a ser eliminado quando a prateleira é GCed (ou pelo apagamento garantia após a prateleira está fora de uso, independentemente de quando), mas a única solução que eu posso vir acima com para este envolve o uso de tempfile.TemporaryFile () para abrir um identificador de arquivo, recebendo o nome do arquivo a partir da alça, usando este nome de arquivo para abrir uma prateleira, mantendo a referência para o identificador de arquivo para evitar que ele fique GCed (e o arquivo excluído), e em seguida, colocar um invólucro na prateleira que armazena esse referência. Alguém tem uma solução melhor do que essa bagunça convoluta?

Restrições:. Só pode usar a biblioteca python padrão e deve ser plataforma totalmente cruz

Foi útil?

Solução

Eu preferia herdar de shelve.Shelf, e substituir o método close (*) para desvincular os arquivos. Note que, dependendo do módulo dbm específico que está sendo usado, você pode ter mais de um arquivo que contém a prateleira. Uma solução poderia ser a criação de um diretório temporário, em vez de um arquivo temporário, e remover qualquer coisa no diretório quando terminar. A outra solução seria se ligam a um módulo específico dbm (digamos, bsddb, ou dumbdbm), e especificamente remover os arquivos que essas bibliotecas criar.

(*) aviso de que o método close de uma prateleira também é chamado quando a prateleira é lixo coletado. O único caso como você pode acabar com arquivos de lixo é quando o intérprete trava ou é morto.

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