【问题标题】:Ruby, Sinatra: Threads are not workingRuby,Sinatra:线程不工作
【发布时间】:2014-07-17 19:06:27
【问题描述】:

我有一个非常简单的 Sinatra 应用程序来测试多线程(或多处理——我只想在 3 秒内得到响应,不管服务器上处理了多少其他查询)。

require 'sinatra/base'

class MyApp < Sinatra::Base
    set :threaded, true
    get '/freeze' do
        Thread.new {
          sleep 3
        }.join
        'Its finished'
    end

    run! if app_file == $0
end

从这个主题我发现,Sinatra 实际上是从 1.3 开始的多线程(我有 1.4.5)。 Is Sinatra multi threaded?

我用瘦和独角兽尝试过,通过thin --threaded 和只是ruby my_app.rb。没有区别,第二个请求需要 6 秒来处理。我试图将 gem 切换到 async_sinatrasinatra-synchrony 但一切都毫无意义。 我做错了什么?

【问题讨论】:

    标签: ruby multithreading sinatra


    【解决方案1】:

    这种阻止行为的最可能原因是您正在从 Web 浏览器中的两个不同选项卡进行测试,这会阻止第二次调用,直到第一次调用完成。例如,您可以通过 Firefox 的网络监视器轻松看到这种情况。改为从命令行尝试:

    curl http://localhost:3000/freeze &
    

    【讨论】:

    • 有趣的想法!我会尽快检查并报告。谢谢!
    猜你喜欢
    • 2012-01-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多