Class: NewBridge::InstancePoolClient

Inherits:
Object
  • Object
show all
Defined in:
lib/new_bridge/instance_pool_client.rb

Overview

Phase 2: manage a small pool of external R gatekeeper processes. Each instance is isolated by having its own TCP socket + R process.

Defined Under Namespace

Classes: Error

Instance Method Summary collapse

Constructor Details

#initialize(source_path:, instances:, host: '127.0.0.1', r_cmd: 'R') ⇒ InstancePoolClient

Returns a new instance of InstancePoolClient.

Parameters:

  • source_path (String)

    Path to either .cpp file (uses sourceCpp) or .so file (uses dyn.load)



12
13
14
15
16
17
18
19
20
# File 'lib/new_bridge/instance_pool_client.rb', line 12

def initialize(source_path:, instances:, host: '127.0.0.1', r_cmd: 'R')
  @instances = instances
  @host = host
  @r_cmd = r_cmd
  @clients = {}
  instances.each do |instance_id|
    @clients[instance_id] = SessionClient.new(source_path: source_path, host: @host, r_cmd: @r_cmd)
  end
end

Instance Method Details

#eval_r(code, session_id:, instance_id:, timeout: 60) ⇒ Object



32
33
34
35
# File 'lib/new_bridge/instance_pool_client.rb', line 32

def eval_r(code, session_id:, instance_id:, timeout: 60)
  client = @clients.fetch(instance_id)
  client.eval_r(code, session_id: session_id, instance_id: instance_id, timeout: timeout)
end

#startObject



22
23
24
25
# File 'lib/new_bridge/instance_pool_client.rb', line 22

def start
  @instances.each { |iid| @clients.fetch(iid).start }
  self
end

#stopObject



27
28
29
30
# File 'lib/new_bridge/instance_pool_client.rb', line 27

def stop
  @clients.each_value(&:stop)
  self
end