【发布时间】:2019-07-31 16:36:24
【问题描述】:
我正在尝试让 Rails 4 应用程序向某些 API 发出大量 http 请求来处理更多流量,最初控制器中的代码如下所示:
def index
@var1 = api_call some_params1
@var2 = api_call some_params2
@var3 = api_call some_params3
@var4 = api_call some_params4
@var5 = api_call some_params5
end
我做了一些谷歌搜索,最终将其重构为:
def index
@var1 = Thread.new { api_call some_params1 }.value
@var2 = Thread.new { api_call some_params2 }.value
@var3 = Thread.new { api_call some_params3 }.value
@var4 = Thread.new { api_call some_params4 }.value
@var5 = Thread.new { api_call some_params5 }.value
end
我这样做对吗?还是我应该在某处的那些线程上调用join?
这对生产安全吗?或者我应该在 Nginx 或乘客配置中进行调整吗?
【问题讨论】:
-
您可能需要考虑为此使用ActiveJob 而不是任意线程。像这样的代码可能会创建数千个未驯服的线程,如果不是整个服务器,最终可能会使您的 Ruby 进程崩溃。
标签: ruby-on-rails ruby multithreading nginx