我有一個連接到遠程FTP服務器並下載文件的Python腳本。由於我連接的服務器是非常可靠的而不是,它經常發生傳輸延遲和傳輸速率變得非常低。但是,沒有錯誤發生,所以我的腳本也停止。如何在指定時間後中止並重試ftp下載?
我使用ftplib
模塊和retrbinary
函數。我希望能夠設置超時值,之後下載中止,然後自動重試/重新啓動傳輸(恢復會很好,但這不是必須的,因爲這些文件只有〜300M)。
我有一個連接到遠程FTP服務器並下載文件的Python腳本。由於我連接的服務器是非常可靠的而不是,它經常發生傳輸延遲和傳輸速率變得非常低。但是,沒有錯誤發生,所以我的腳本也停止。如何在指定時間後中止並重試ftp下載?
我使用ftplib
模塊和retrbinary
函數。我希望能夠設置超時值,之後下載中止,然後自動重試/重新啓動傳輸(恢復會很好,但這不是必須的,因爲這些文件只有〜300M)。
我管理什麼,我需要使用threading
模塊做:
conn = FTP(hostname, timeout=60.)
conn.set_pasv(True)
conn.login()
while True:
localfile = open(local_filename, "wb")
try:
dlthread = threading.Thread(target=conn.retrbinary,
args=("RETR {0}".format(remote_filename), localfile.write))
dlthread.start()
dlthread.join(timeout=60.)
if not dlthread.is_alive():
break
del dlthread
print("download didn't complete within {timeout}s. "
"waiting for 10s ...".format(timeout=60))
time.sleep(10)
print("restarting thread")
except KeyboardInterrupt:
raise
except:
pass
localfile.close()
從你的鏈接:「可選的超時參數指定超時秒來阻止操作,如連接嘗試「。我只是嘗試了,超時參數似乎沒有影響'retrbinary'(只在'connect'上) –