首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Ruby:如何处理线程异常?

Ruby:如何处理线程异常?
EN

Stack Overflow用户
提问于 2015-10-19 09:41:56
回答 1查看 40关注 0票数 0

我这里的密码..。

代码语言:javascript
复制
require 'thread'

$temp = Thread.new do
  loop do
    puts 'loop me'
    begin
      puts "try thread"
      raise Exception.new('QwQ') if rand > 0.5
      puts "skip try"
    rescue
      puts "QwQ"
    end
    sleep(0.5)
  end
  puts '...WTF'
end

loop do
  puts "runner #{Thread.list.length} #{$temp.status}"
  sleep(2)
end

如何保持runnerloop thread运行?以及如何像这样修改代码?

我试过像Thread.abort_on_exception一样,但它会扼杀这个过程.

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-10-19 10:11:12

捕获线程中的异常,并在主线程可访问的变量中设置错误(用于测试,可以使用一个全局变量,如:$thread_error)。

如果存在错误变量,则从主线程引发它。

您还可以使用队列在线程之间进行通信,但这样就无法利用多个线程。

代码语言:javascript
复制
require 'thread'

$temp = Thread.new do
  begin
    loop do
      puts 'loop me'
      begin
        puts "try thread"
        raise Exception.new('QwQ') if rand > 0.5
        puts "skip try"
      rescue
        puts "QwQ"
      end
      sleep(0.5)
    end
    puts '...WTF'
  rescue Exception => e
    $thread_error = e
    raise e
  end
end

loop do
  puts "runner #{Thread.list.length} #{$temp.status}"
  raise $thread_error if $thread_error
  sleep(2)
end
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33211229

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档