Method: Collective::Worker#initialize

Defined in:
lib/collective/worker.rb

#initialize(prototype_job, options = {}) ⇒ Worker

Returns a new instance of Worker.

Parameters:

  • options (:name) (defaults to: {})

    is optional

  • options (:policy) (defaults to: {})

    is optional

  • options (:registry) (defaults to: {})

    is optional



46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
# File 'lib/collective/worker.rb', line 46

def initialize( prototype_job, options = {} )
  @policy   = options[:policy] || Collective::Policy.resolve
  @name     = options[:name] || policy.name || prototype_job.to_s
  @storage  = policy.storage
  @registry = options[:registry] || Collective::Registry.new( name, storage )
  @job      = Collective::Idler.new( resolve_job( prototype_job ), min_sleep: policy.worker_idle_min_sleep, max_sleep: policy.worker_idle_max_sleep )

  # type checks
  policy.pool_min_workers
  registry.workers

  # post-fork processing
  storage.reconnect_after_fork
  registry.reconnect_after_fork

  # set up observers
  policy.observers.each do |observer|
    o = Collective::Utilities::ObserverBase.resolve(observer)
    add_observer(o)
  end

  # manage the registry via an observer
  add_observer( Collective::LifecycleObserver.new( key, registry ) )
end