Ruby,Sinatra:线程不起作用

时间:2014-05-28 13:54:44

标签: ruby multithreading sinatra

我有非常简单的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

从这个话题我发现,自1.3以来Sinatra实际上是多线程的(我已经得到了1.4.5)。 Is Sinatra multi threaded?

我尝试使用瘦身和独角兽,通过thin --threadedruby my_app.rb。没有区别,第二个请求需要6秒才能处理。我试图将宝石切换为async_sinatrasinatra-synchrony,但一切都毫无意义。 我做错了什么?

1 个答案:

答案 0 :(得分:1)

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

curl http://localhost:3000/freeze &