Сеть Ruby:: потоки тайм-аута FTP

Если бы я был на Вашем месте, я загрузил бы утилиту соединения с MS: http://technet.microsoft.com/en-us/sysinternals/bb896768.aspx и затем отображают Ваш "C:\path" для высказывания, "z:\" и "c:\path2" для высказывания, "y:\". Таким образом, Вы будете уменьшать 4 символа на объект в Вашем classpath.

set CLASS_PATH=C:\path\a\b\c;C:\path\e\f\g;
set CLASS_PATH=%CLASS_PATH%;C:\path2\a\b\c;C:\path2\e\f\g;

Теперь, Ваш путь к классу будет:

set CLASS_PATH=z\a\b\c;z\e\f\g;
set CLASS_PATH=%CLASS_PATH%;y:\a\b\c;y:\e\f\g;

Это могло бы сделать больше в зависимости от Вашего фактического classpath.

9
задан 2potatocakes 17 September 2014 в 02:07
поделиться

1 ответ

Уловка, которая сработала для меня, заключалась в использовании Ruby Timeout.timeout, чтобы гарантировать, что FTP-соединение не зависает.

begin
    Timeout.timeout(10) do
        ftp.getbinaryfile(rmls_path, local_path)
    end
    # ...
rescue Timeout::Error
    errors << "#{thread_num}> File download timed out for: #{rmls_path}"
    puts errors.last
rescue
    errors << "unable to get file > ftp reponse: #{ftp.last_response}"
    # ...
end

Зависание загрузки по FTP приводило к зависанию моих бесед. Теперь, когда потоки больше не висят, я могу использовать более правильный способ работы с потоками:

threads.each { |t| j.join }

, а не уродливый:

# If @last_updated has not been updated on the server in over 20 seconds, wait 3 seconds and check again
while Time.now < @last_updated + 20 do
    sleep 3
end
# threads are hanging so joining the threads does not work.
threads.each { |t| t.kill }
10
ответ дан 4 December 2019 в 21:11
поделиться
Другие вопросы по тегам:

Похожие вопросы: