Проблемы с параллельными процессами в IRB на Mac - PullRequest
1 голос
/ 07 июня 2011

Я работаю с базой данных через IRB, и я хотел бы периодически вносить изменения в базу данных (например, каждые 10 секунд), отображая журнал в STDOUT.

Кроме того, я хотел бы, чтобы ручное управление могло изменять базу данных и останавливать первый процесс.

Пока я подошел к следующему

def start
  stop
  @running = Thread.new do
    loop do
      fork do
        puts 'change the database'
      end
      sleep 10
    end
  end
  nil
end

def stop
  @running.kill if @running
end

Однако, это не выполняется каждые 10 секунд, если я не введу что-либо в основной поток IRB.

Как заставить это работать?

Ответы [ 2 ]

1 голос
/ 30 сентября 2011

Некоторые версии readline в OSX блокируются. Если кто-то испытывает поведение, которое вы описали, он может отключить readline, поставив

IRB.conf[:USE_READLINE] = false

в .irbrc

0 голосов
/ 07 июня 2011

У меня отлично работает (проверено в irb с ruby ​​1.9.2-p180 и 1.8.7-p334).

...