Ruby-Threads (Rake) für FTP
-
06-07-2019 - |
Frage
Ich habe eine Harke Aufgabe, die eine Liste von Dateien via FTP-Uploads. Kopieren ohne Threading funktioniert gut, aber es wäre schneller, wenn ich mehrere gleichzeitige Uploads tun könnte. (Ich bin neu in Ruby und Multithreading, also keine Überraschung, es hat nicht funktioniert auf Anhieb.)
ich habe:
files.each_slice(files.length / max_threads) do |file_set|
threads << Thread.new(file_set) do |file_slice|
running_threads += 1
thread_num = running_threads
thread_num.freeze
puts "making thread # #{thread_num}"
file_slice.each do |file|
file.freeze
if File.directory?(file)
else
puts file.pathmap("#{$ftpDestination}%p")
ftp.putbinaryfile(file, file.pathmap("#{$ftpDestination}%p"))
end
end
end
end
Meine Ausgabe ist:
making thread # 1
/test/./1column-ff-template.aspx
making thread # 2
making thread # 3
/test/./admin/footerContent.aspx
/test/./admin/contentList.aspx
making thread # 4
/test/./3columnTemplate.ascx
making thread # 5
/test/./ascx/dashboard/dash.ascx
making thread # 6
/test/./ascx/Links.ascx
making thread # 7
/test/./bin/App_GlobalResources.dll
making thread # 8
/test/./bin/App_Web__foxtqrr.dll
making thread # 9
/test/./GetPageLink.ascx
So sieht es aus wie jeder Thread eine Datei zum Hochladen beginnt und dann stirbt, ohne einen Fehler. Was mache ich falsch?
Lösung 2
Die Wurzel des Problems festgelegt wurde durch Zugabe von:
threads.each { |t| t.join }
, nachdem die file_slice
Schleife endet.
Dank JRL mir geholfen, die Ausnahme zu finden!
Andere Tipps
Wenn abort_on_exception
falsch ist und der Debug-Flag nicht aktiviert (Standard) eine nicht behandelte Ausnahme tötet den aktuellen Thread. Sie wissen nicht einmal darüber nach, bis Sie ein auf dem Faden kommen ausgeben, die sie angehoben. So können Sie eine Verknüpfung oder den Debug-Flag ändern und Sie sollen die Ausnahme, wenn man in der Tat geworfen wird.