FTPサーバーに大量のファイルをアップロードする。アップロードの途中でサーバーがタイムアウトして、それ以上アップロードできなくなります。サーバーがタイムアウトしたかどうかを検出し、再接続してデータの送信を続行する方法を知っている人はいますか?私は、送信用にPython ftpライブラリを使用しています。PythonでFTPサーバーのタイムアウトを検出する方法
おかげ
FTPサーバーに大量のファイルをアップロードする。アップロードの途中でサーバーがタイムアウトして、それ以上アップロードできなくなります。サーバーがタイムアウトしたかどうかを検出し、再接続してデータの送信を続行する方法を知っている人はいますか?私は、送信用にPython ftpライブラリを使用しています。PythonでFTPサーバーのタイムアウトを検出する方法
おかげ
あなたは、単に接続のタイムアウトを指定することができますが、ファイル転送や他の操作中にタイムアウトのためにそれはそう単純ではないのです。
storbinaryおよびretrbinaryメソッドを使用すると、コールバックを提供できるため、ウォッチドッグタイマーを実装できます。データを取得するたびにタイマーをリセットします。少なくとも30秒ごとにデータを取得しないと、ウォッチドッグはFTPセッションを中断して終了させ、イベントループにイベントを戻します。
ftpc = FTP(myhost, 'ftp', 30)
def timeout():
ftpc.abort() # may not work according to docs
ftpc.close()
eventq.put('Abort event') # or whatever
timerthread = [threading.Timer(30, timeout)]
def callback(data, *args, **kwargs):
eventq.put(('Got data', data)) # or whatever
if timerthread[0] is not None:
timerthread[0].cancel()
timerthread[0] = threading.Timer(30, timeout)
timerthread[0].start()
timerthread[0].start()
ftpc.retrbinary('RETR %s' % (somefile,), callback)
timerthread[0].cancel()
これで十分でない場合は、別のAPIを選択する必要があるようです。 Twistedフレームワークには、タイムアウトロジックを追加できるようにするFTP protocol supportがあります。
どのような対応がありますか(あれば)?それは[400コードの1つ](http://en.wikipedia.org/wiki/List_of_FTP_server_return_codes)ですか? –