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?

War es hilfreich?

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.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top