ftp read() Erro de memória em python
Pergunta
recebo um erro 'Erro de memória' quando ele abre e lê um arquivo maior que 500 MB.se for menor que 500 MB funciona perfeitamente.estou usando o tamanho do valor máximo da minha barra de progresso
self.ftp = FTP(hostname)
self.ftp.login(user, password)
self.f = open(self.filename,'rb')
with open(self.filename,'rb') as filein:
self.size = filein.read()
self.size = len(self.size)
Solução
Não use o read()
método, pois lê o arquivo inteiro em uma string.Você deve usar o os.stat()
função para obter os metadados do arquivo, que retorna uma estrutura estatística com o membro st_size
.Esse é o tamanho em bytes do arquivo.Você não precisa ler tudo primeiro.
Para enviar, leia e escreva também em pedaços (digamos 16kB), em um loop.
Outras dicas
Então, filein.read() realmente lê (ou seja,baixa) o arquivo e está consumindo sua memória.
Você pode usar
self.size = self.ftp.size(self.filename)
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow