lib/rhack/frame.rb in rhack-1.3.4 vs lib/rhack/frame.rb in rhack-1.3.5

- old
+ new

@@ -126,11 +126,10 @@ ### Управление потоками: # @ :thread_safe : не использовать луп исполнения Curl::Multi#perform, а вызывать #perform прямо в этом треде; # если установлен, то невозможно прерывание исполнения клавиатурой (продолжит работать, выполняя колбеки, в фоне), и невозможно задавать больше параллельных реквестов, чем разрешено параллельных соединений (просто застрянет) # @ :sync : остановить (Thread#kill) perform-loop после исполнения всех запросов; подразумевает wait=true; при вызове одиночного реквеста подразумевает thread_safe=true # @ :wait : ждать исполнения всех реквестов - # @ :raw + :sync : подразумевает save_result=true # # @ [deprecated] :zip, :stream и все опции для result # # TODO: Семантически разделить синхронное и асинхронное выполнение запросов (не важно, серии или отдельных), с учётом, что асинхронность по сути своей перегружена и требуется, например, в очередях сообщений, но не в синхронных контроллерах Rails # @@ -267,11 +266,11 @@ opts[:wait] = true if !:wait.in(opts) and :proc_result.in(opts) ? !opts[:proc_result] : opts[:save_result] opts[:eval] = false if opts[:json] or opts[:hash] or opts[:raw] opts[:load_scripts] = self if opts[:load_scripts] - opts[:save_result] = true if opts[:wait] and opts[:raw] + #opts[:save_result] = true if opts[:wait] and opts[:raw] if orders opts[:thread_safe] = false if @ss.size < orders.size else opts[:thread_safe] = true if opts[:sync] @@ -366,11 +365,10 @@ # if we don't want callback to affect page.res # then we should not set :save_result if yres == :skip return # DEPRECATED else - page.res = yres if opts[:proc_result].is Proc # yres is intermediate result that we should proc page.res = opts[:proc_result].call yres #elsif opts[:save_result] or :proc_result.in opts else @@ -414,10 +412,12 @@ # sometimes (about 2% for 100-threads-dling) when this string is calling # no matter what +curl.res.body+ has contained here RMTools.rw @write_to+'/'+order[-2].sub(/^\w+:\/\//, ''), curl.res.body.xml_to_utf end if opts[:raw] + # curl.res уже создан, но + # вызываем curl, а не curl.res, чтобы проще было сделать retry, если нужно page.res = block_given? ? yield(curl) : curl.body_str # here +curl.res.body+ becomes empty # curl.res.body.+xml_to_utf+ -- maybe this is problem? elsif page.process(curl, opts) @@cache[page.href] = page if order[0] == :loadGet and @use_cache @@ -425,14 +425,14 @@ # nothing to do here if process returns nil or false end } # > Carier.requests++ unless opts[:wait] and opts[:thread_safe] or opts[:exec] == false - Curl.execute :unless_already + Curl.execute :raise_errors end if opts[:wait] opts[:thread_safe] ? Curl.carier.perform : Curl.wait - (callback or :proc_result.in opts) ? page.res : page + (callback or opts[:raw] or :proc_result.in opts) ? page.res : page else page end end def exec_many(orders, with_opts, &callback) \ No newline at end of file