Module: RailsParallel::Forks
- Included in:
- Runner::Child, Runner::Parent, Runner::Schema
- Defined in:
- lib/rails_parallel/forks.rb
Instance Method Summary collapse
- #before_exit ⇒ Object
- #check_status(stat) ⇒ Object
- #fork_and_run ⇒ Object
- #wait_any(nonblock = false) ⇒ Object
- #wait_for(pid, nonblock = false) ⇒ Object
Instance Method Details
#before_exit ⇒ Object
35 36 37 |
# File 'lib/rails_parallel/forks.rb', line 35 def before_exit # cleanup here (in children) end |
#check_status(stat) ⇒ Object
31 32 33 |
# File 'lib/rails_parallel/forks.rb', line 31 def check_status(stat) raise "error: #{stat.inspect}" unless stat.success? end |
#fork_and_run ⇒ Object
3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
# File 'lib/rails_parallel/forks.rb', line 3 def fork_and_run ActiveRecord::Base.connection.disconnect! if ActiveRecord::Base.connected? fork do begin yield Kernel.exit!(0) rescue Interrupt, SignalException Kernel.exit!(1) rescue Exception => e puts "Error: #{e}" puts(*e.backtrace.map {|t| "\t#{t}"}) before_exit Kernel.exit!(1) end end end |
#wait_any(nonblock = false) ⇒ Object
27 28 29 |
# File 'lib/rails_parallel/forks.rb', line 27 def wait_any(nonblock = false) wait_for(-1, nonblock) end |
#wait_for(pid, nonblock = false) ⇒ Object
21 22 23 24 25 |
# File 'lib/rails_parallel/forks.rb', line 21 def wait_for(pid, nonblock = false) pid = Process.waitpid(pid, nonblock ? Process::WNOHANG : 0) check_status($?) if pid pid end |