2015-10-21 170 views
0

我有一個腳本(如下),將HTML文件推送到服務器。它工作95%的時間。但是,大約有5%的時間,服務器失敗,連接嘗試掛起。它停頓15分鐘(900秒)然後失敗。FTP掛起/ 421超時的Python錯誤處理

ftp = FTP('[FTP ADDRESS HERE]') 
    ftp.login('[USERNAME]','[PASSWORD]') 
    converted_HTML_string = io.BytesIO(HTML_string) 
    ftp.storbinary('STOR public_html/home.html', converted_HTML_string) 

再說一次,這項工作的95%時間。在5%的情況下,如果我在掛起時手動中斷它,然後再次重新運行請求 - 那麼它就可以工作。這似乎是由臨時服務器故障引起的。我無法控制服務器的質量。

真正的問題是吊掛太長。我希望能夠設置一個時間限制(如30秒),然後讓代碼顯示「重新運行此ftp命令直到成功」。

這可能嗎?我有另一種方法來處理這個問題嗎?

謝謝!

回答

1

通道超時在ftp服務器上設置。某些接口(如FileZilla)允許您配置頻道超時。幸運的是,Python的FTP軟件包就是其中之一。有關更多詳細信息,請參見documentation。 在此期間,只要嘗試的超時參數:

ftp = FTP('[FTP ADDRESS HERE]', timeout=30) 

馬克西姆·洛特(OP)是能夠趕上與以下,其中超時錯誤重試連接,直到它的工作原理:

import socket 
except socket.timeout, e: 
+0

謝謝。在情況下,它可以幫助別人,我能趕上與以下超時錯誤,這使我重新嘗試連接,直到它的工作原理: –

+0

進口插座[此處段] 除了socket.timeout,E: –

+0

我在你的答案中加入你的解釋,給它更大的知名度。 – Prune

1

這個錯誤讓我想到了一段時間。

我,而真正的

  • )一個無限循環,所以當它發生時它還是真

  • 然後我打電話給我的功能ftp_connect_to_site(即一個名爲RemoteTar

  • 類中破例

此功能會如果這發生異常不是最好的辦法,以重新連接。

是在Python初學者,所有我能想到的

  except ftplib.error_temp as e: 
       print('Time run out reconnect: ',e) 
       RemoteTar.ftp_connect_to_site()