# File lib/hydra/worker.rb, line 17
    def initialize(opts = {})
      @verbose = opts.fetch(:verbose) { false }
      @io = opts.fetch(:io) { raise "No IO Object" }
      @runners = []
      @listeners = []
      @options = opts.fetch(:options) { "" }

      load_worker_initializer

      @runner_event_listeners = Array(opts.fetch(:runner_listeners) { nil })
      @runner_event_listeners.select{|l| l.is_a? String}.each do |l|
        @runner_event_listeners.delete_at(@runner_event_listeners.index(l))
        listener = eval(l)
        @runner_event_listeners << listener if listener.is_a?(Hydra::RunnerListener::Abstract)
      end
      @runner_log_file = opts.fetch(:runner_log_file) { nil }

      boot_runners(opts.fetch(:runners) { 1 })
      @io.write(Hydra::Messages::Worker::WorkerBegin.new)

      process_messages

      @runners.each{|r| Process.wait r[:pid] }
    end