【问题标题】:Trouble with threads in OSX and Ruby 1.9.2OSX 和 Ruby 1.9.2 中的线程问题
【发布时间】:2011-09-29 06:06:36
【问题描述】:

在 IRB 中运行以下代码:

t = Thread.new { loop { puts 'Hi' } }

我收到一个 hi 然后没有更多的输出。只有当我开始按 enter 键时,我才会按预期收到输出,直到我停止按 enter。

如果我这样做 t.join,一切都会按预期进行

问题发生在 IRB、pry 和 ripl 中使用 ruby​​ 1.9.2-p180 和 1.9.2-p290 在 OSX 10.7 中的 rvm 1.8.0 和 OSX 10.6 中的 rvm 1.6.20 下

readline 是通过 rvm pkg install readline 安装的

感谢您的任何见解

【问题讨论】:

  • 是关于代码的问题,还是在 IRB 中运行的代码? IRB 在幕后做了一些古怪的事情,所以这些是非常不同的问题。
  • 因为它在 IRB 和 ripl 中运行。我知道 IRB 很古怪,但这并不意味着问题要么是由 IRB/ripl 引起的,要么是无法克服的。
  • 当我从.rb 文件运行代码时,它的行为就像我期望在没有一个“嗨”的情况下关闭一样。然后我从文件和 irb Thread.new{ loop{ puts 'Hi'; sleep 2} } 中尝试了以下代码。看来 irb 还是让线程继续运行。
  • 这与我所看到的相反。当我在 IRB 中运行该代码时,它会一直休眠,直到我按住 enter 键。
  • 请列为答案并在 2 天后将其标记为已回答

标签: ruby multithreading macos ruby-1.9 ruby-1.9.2


【解决方案1】:

OSX 上的某些版本的 readline 被阻塞。如果您遇到上述行为,您可以通过放置来禁用 readline

IRB.conf[:USE_READLINE] = false

在.irbrc中

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-09-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-13
    相关资源
    最近更新 更多