我正在使用Python的多处理功能来使用FTP进行批量下载。但是,当我尝试打开5个以上的FTP会话时,会引发EOFError,这意味着主持人打开太多会话而断开连接。有没有办法腌制FTP对象?
我看到的唯一解决方案是打开一个FTP对象并将其传递给必要的方法。问题是因为多处理使用酸洗来移动对象,并且FTP对象不能被腌制,所以这是不可能的。因此,我的问题是否可以通过找到一种方法来腌制FTP对象来解决这个问题?
我的代码如下形式:
def get_file(name):
#code here
def worker(name_list, out_q):
lst = []
for name in name_list:
lst.append(get_file(name))
out_q.put(lst)
if __name__ == '__main__':
#est ftp cnxn
ftp = FTP('ftp.blah.blah', 'anonymous', 'meow')
#multiprocessing code here
的get_file高清需要访问FTP连接,如果我把它if __name__ == '__main__'
块外,然后一个新的FTP连接创建的每个时间过程贯穿代码。
回答你问题:我假设并行下载会更快,即使只有一个FTP连接打开。这不是这种情况吗? – aensm 2012-07-11 14:46:16
那么开始在同一个线程中的所有下载之间的区别是什么? – 2012-07-11 14:49:51
如果我在同一个线程中进行所有下载,那么将分解下载列表成块并使多个进程同时下载文件要慢得多。您是否暗示单个FTP会话一次只能进行一个下载过程?因为如果是这样的话,是的,这会大大地破坏目的。 – aensm 2012-07-11 14:57:27