rails多线程案例1
欢迎转载,请支持原创,保留原文链接:blog.ilibrary.me
rails怎么利用多线程请求内网服务。
需求
有一个api,是一个聚合API,它会调用内网十几个api,然后把结果聚会后返回给客户。十几个API是串行的。
结果就是,冷启动(用户第一次请求,未上cache)的时候,这个请求耗时可以达到惊人的40s以上。
陈年老代码,没人愿意动,大概也不敢动。
现在还要不停地往里塞API请求,不停地膨胀。
没办法了,还是改多线程请求吧。
注意,这不是高并发的东西,因为只是在服务单个请求的过程中做局部优化,把对外的请求做一个多线程处理。 我们平常说的高并发一般是把外部进来的请求做多线程处理,和本文的情况不太一样。
Rails 多线程
Notes
API: must be called with a block
thread_group = ThreadGroup.new # some permission thread_group.add Thread.new do Rails.application.executor.wrap do # check permission end end thread_group.list.map &:join
改成
- ``
thread_group = ThreadGroup.new # some permission thread_group.add( Thread.new do Rails.application.executor.wrap do # check permission end end) thread_group.list.map &:join
- request controller卡死. 客户端请求过来以后,请求卡死了。
links
- 详解 Rails Controller 中的 Callback, 多线程避不开callback, 事情做完了总得回调一下。
- Threading and Code Execution in Rails, rails官方文档.