Method: BaseChip::Tasker#maintain_workers

Defined in:
lib/base_chip/tasker.rb

#maintain_workersObject



141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
# File 'lib/base_chip/tasker.rb', line 141

def maintain_workers
  ready = @pending_tasks.select {|t| t.wait_count == 0}
  if @clusters
    slots = available_slots
    foo = ready.size - workers_spawned
    foo = slots if slots < foo
    if foo > 0
      foo.times do |i|
        client_id = new_client_id
        cluster, uid = spawn_worker(ready[0].worker_command.call(client_id))
        raise "spawn_worker response wasn't unique" if @workers[uid]
        @workers[client_id] = {:uid => uid, :cluster=> cluster, :started=>Time.now, :tasks=>[], :state=>:spawned, :worker_command=>ready[i].worker_command.call(0)}
        status_line
      end
    end
  else
    @workers[0] = {:started=>Time.now, :tasks=>[], :state=>:running, :worker_command=>ready[0].worker_command} if ready[0]
  end

  # puts "ready=#{(ready.*.task_name).inspect}"
  ready
end