روبي المواضيع (الخليع) لFTP
-
06-07-2019 - |
سؤال
ولدي مهمة أشعل النار التي بتحميل قائمة من الملفات عن طريق بروتوكول نقل الملفات. النسخ دون خيوط يعمل بشكل جيد، ولكن سيكون أسرع إذا كان بإمكاني القيام متعددة تحميل المتزامنة. (أنا جديدة على روبي وخاصية تعدد، لذلك ليس من المستغرب أنه لم يعمل الحق قبالة الخفافيش).
ولدي:
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
وبلدي الإخراج هو:
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
وهكذا يبدو أن يبدأ كل موضوع لتحميل ملف ثم يموت بدون خطأ. ما أفعل الخطأ؟
المحلول 2
وكان قد حدد جذر المشكلة عن طريق إضافة:
threads.each { |t| t.join }
وبعد انتهاء حلقة file_slice
.
وبفضل JRL لمساعدتي في العثور على استثناء!
نصائح أخرى
إذا abort_on_exception
هو زائف ولم يتم تمكين العلم التصحيح (الافتراضي) استثناء غير معالج يقتل الترابط الحالي. أنت لا تعرف حتى عن ذلك حتى يتم إصدار الانضمام على الخيط الذي رفعه. حتى تتمكن من القيام صلة أو تغيير العلم التصحيح ويجب عليك الحصول على استثناء إذا تم طرح واحد في الواقع.