我正在使用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