0

500MBを超えるファイルを開いて読み取ると、「メモリエラー」というエラーが発生します。500MB未満の場合は、完全に機能します。プログレスバーの最大値のサイズを使用しています。

    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)
4

2 に答える 2

1

したがって、filein.read()は実際にファイルを読み取り(つまりダウンロード)、メモリを消費します。
代わりに使用できます

self.size = self.ftp.size(self.filename)
于 2011-05-19T05:26:21.750 に答える
0

read()ファイル全体を文字列に読み込むため、このメソッドは使用しないでください。この関数を使用os.stat()して、メンバーを含む統計構造を返すファイルメタデータを取得する必要がありますst_size。これがファイルのバイト単位のサイズです。最初にすべてを読む必要はありません。

送信の場合は、ループ内でチャンク(たとえば16kB)で読み取りと書き込みも行います。

于 2011-05-19T06:29:07.867 に答える