module ConcurrentWorker::ConcurrentProcess

Public Instance Methods

channel_close() click to toggle source
# File lib/concurrent_worker/worker.rb, line 283
def channel_close
  @ipc_channel.close
end
cncr_block() click to toggle source
# File lib/concurrent_worker/worker.rb, line 246
def cncr_block
  @ipc_channel = IPCDuplexChannel.new
  @c_pid = fork do
    @ipc_channel.choose_io
    Thread.handle_interrupt(Object => :never) do
      begin
        Thread.handle_interrupt(Object => :immediate) do
          yield_base_block
        end
      rescue
        @ipc_channel.send($!)
      ensure
        @ipc_channel.send(nil)
      end
    end
  end
  @ipc_channel.choose_io
  @recv_thread = result_handle_thread do
    ipc_recv_loop
  end
end
ipc_recv_loop() click to toggle source
# File lib/concurrent_worker/worker.rb, line 238
def ipc_recv_loop
  while result = @ipc_channel.recv
    raise result if result.kind_of?(Exception)

    call_result_callbacks(result)
  end
end
receive_req() click to toggle source
# File lib/concurrent_worker/worker.rb, line 273
def receive_req
  #called from worker process only
  @ipc_channel.recv
end
send_req(args) click to toggle source
# File lib/concurrent_worker/worker.rb, line 268
def send_req(args)
  #called from main process only
  @ipc_channel.send(args)
end
send_res(args) click to toggle source
# File lib/concurrent_worker/worker.rb, line 278
def send_res(args)
  #called from worker process only
  @ipc_channel.send(args)
end
wait_cncr_proc() click to toggle source
# File lib/concurrent_worker/worker.rb, line 287
def wait_cncr_proc
  begin
    Process.waitpid(@c_pid)
  rescue Errno::ECHILD
  end
  @recv_thread && @recv_thread.join
end