Sie können einen weiteren Thread erstellen, um den Download-Fortschritt zu verfolgen und die Anwendung zum Absturz zu bringen, wenn der Download nicht mehr reagiert. Da Net :: SFTP Sie in einem benutzerdefinierten Handler zum download!
Methode passieren lässt, können Sie den Beobachter Faden wie diese ein:
class CustomHandler
def extend_time
@crash_time = Time.now + 30
end
# called when downloading has started
def on_open(downloader, file)
extend_time
downloader_thread = Thread.current
@watcher_thread = Thread.new{
while true do
if Time.now > @crash_time
downloader_thread.raise "Downloading appears unresponsive. Network disconnected?"
end
sleep 5
end
}
end
# called when new bytes are downloaded
def on_get(downloader, file, offset, data)
extend_time
end
# called when downloading is completed
def on_close(downloader, file)
@watcher_thread.exit
end
end
Und vergessen Sie nicht, wie dies in der benutzerdefinierten Handler weitergeben müssen:
In einer Situation, wenn Ihr Programm als Skript aufgerufen wird, ist dies selten ein Problem, net :: sftp hat Standard-Timeout, aber es ist für die Anfangsphase der Verbindung, denke ich. Wenn also die bestehende Verbindung aufhört, müssen Sie sie vom übergeordneten Thread oder einem anderen Prozess (Kindermädchen) unterbrechen. Wahrscheinlich der einfachste Weg, um dieses Problem zu umgehen. Wenn Sie eine lange laufende Anwendung als Threading haben, ist dies die beste Lösung. – Istvan