我有以下代码:
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。为什么我应该在下载每个文件后关闭它们?如果有更惯用的方法来完成下载大量文件的整个任务,我很想听听。谢谢。
更新:让-保罗的DeferredSemaphore
例子加上马特的FTPFile
成功了。出于某种原因,使用 aCooperator
而不是DeferredSemaphore
会下载一些文件然后失败,因为 FTP 连接会中断。