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