Как добавить / удалить элемент из хэша, который используется потоком - PullRequest
1 голос
/ 29 марта 2019

Я пытаюсь добавить элемент в хэш, который используется потоком, он выдает ниже сообщение об ошибке linkEvent ': невозможно добавить новый ключ в хэш во время итерации (RuntimeError)

@serverDown = Hash.new
def eventMessage(message)

  @server_thread = Thread.new do
        until @serverDown.empty?
          @serverDown.each do |key, value|
              puts "#{key}"
              sleep 3
        end
          Thread.stop if @serverDown.empty?
      end
    end
  end

  if message.include?("down")
    state = message.split.last
    puts "Adding #{state} to hash"
    @serverDown[state] = Time.now.to_i
    @server_thread.wakeup unless @server_thread.alive?
  end
end

@queue = Queue.new
@queue << "server is down"
@queue << "server is down"
@queue << "server is down"
@queue << "server is up"
@equeue << "unreachable"

until @queue.empty?
  event = @queue.pop
  if event.include?("down") || event.include?("up")
    eventMessage(event)
    sleep 3
    next
  end
  puts "#{event}"
end

Я хочу заблокировать поток и добавить элемент в хэш, позже возобновить поток.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...