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)
Foi útil?

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
scroll top