Как я могу убить рубиновый поток по прошествии определенного времени?

Я хочу, чтобы созданный мною поток умер, если он не завершится через определенное время. Есть ли какой-нибудь изящный и / или идиоматический способ сделать это? Прямо сейчас я подумываю создать поток наблюдателя:

def myfunc
  t = Thread.new{
    #do stuff
  }

  # watcher thread
  Thread.new{
    result = t.join(20) # join returns nil if it timed out
    t.kill if result.nil?
  }

  # continue on asynchronously from both threads
end
5
задан John Bachir 26 October 2011 в 01:19
поделиться