私は次のコードを持っています:
for f in fileListProtocol.files:
if f['filetype'] == '-':
filename = os.path.join(directory['filename'], f['filename'])
print 'Downloading %s...' % (filename)
newFile = open(filename, 'w+')
d = ftpClient.retrieveFile(filename, FileConsumer(newFile))
d.addCallback(closeFile, newFile)
残念ながら、問題のディレクトリにある 1000 以上のファイルのうち数百をダウンロードした後、開いているファイルが多すぎるという IOError が発生します。ダウンロード後に各ファイルを閉じる必要があるのはなぜですか? 大量のファイルをダウンロードするというタスク全体にアプローチするためのより慣用的な方法があれば、それを聞いてみたい. ありがとう。
更新: Jean-Paul のDeferredSemaphore
例と Matt の例FTPFile
がうまくいきました。何らかの理由で のCooperator
代わりに を使用するDeferredSemaphore
と、いくつかのファイルがダウンロードされた後、FTP 接続が切断されて失敗します。