スタックオーバーフローについては、FTPファイルを取得し、それをストリングバッファやファイルなどのストリームに書き込んだり、反復処理を行うことができます。Python FTP "チャンク"イテレータ(ファイル全体をメモリにロードせずに)
のような:Read a file in buffer from FTP python
しかし、これらのソリューションは、ファイル全体をメモリにロードするか、内容を処理するために開始する前に、それをディスクにダウンロードすることを含みます。
ファイル全体をバッファリングするのに十分なメモリがないため、ディスクにアクセスできません。これはコールバック関数のデータを処理することで行うことができますが、私は、コードをでラップすることが可能かどうかを知りたいのですが、コールバックで自分のコードを処理するのではなく、イテレータを返します。
I.E.いうより:
def get_ftp_data(handle_chunk):
...
ftp.login('uesr', 'password') # authentication required
ftp.retrbinary('RETR etc', handle_chunk)
...
get_ftp_data(do_stuff_to_chunk)
私がしたい:(既存の答えとは違って)
for chunk in get_ftp_data():
do_stuff_to_chunk(chunk)
そして、私はそれを反復する前に、ディスクやメモリに全体のFTPファイルを記述することなく、それをやりたいです。
同様の問題がある(http://stackoverflow.com/questions/9968592/turn-functions-with-a-callback-into- [Pythonのジェネレータへのコールバックで機能をオンにしますか?] python-generators) –