Ruby on Rails的在同一时间多个HTTP请求?(Ruby on Rails Multipl

2019-08-31 08:15发布

我拉着多个请求(其拉一次一个),我想知道如果有一种方法引入请求都在同一时间,如果我有这样的事情:

client = Instagram.client(:access_token => session[:access_token])
@user = client.user
@recent_media_items = client.user_recent_media

@lv = client.tag_recent_media('lv', options = {:count => 60})
@lv1 = client.tag_recent_media('lv1', options = {:count => 60})
@lv2 = client.tag_recent_media('lv2', options = {:count => 60})
@lv3 = client.tag_recent_media('lv3', options = {:count => 60})

每个lv做一个请求client 。 我在想,如果有一种方法可以做到这样的,因此它可以做到的要求一次全部(一起),而不是一个结束请求,然后继续下一个请求,等等...

谢谢!

Answer 1:

是! 对于证据的概念,尝试

require 'thread'

client = Instagram.client(:access_token => session[:access_token])
@user = client.user
@recent_media_items = client.user_recent_media

threads = []
threads << Thread.new { @lv = client.tag_recent_media('lv', options = {:count => 60}) }
threads << Thread.new { @lv1 = client.tag_recent_media('lv1', options = {:count => 60}) }
threads << Thread.new { @lv2 = client.tag_recent_media('lv2', options = {:count => 60}) }
threads << Thread.new { @lv3 = client.tag_recent_media('lv3', options = {:count => 60}) }
threads.each(&:join) # this waits for all the threads to finish before proceeding
puts [@lv, @lv1, @lv2, @lv3]

在实践中,你将要设置一些错误处理,然后重试线程中的设置。 此外,您可能会遇到与在Instagram的宝石线程安全问题。 如果你这样做大规模与成百上千的请求,你可能想尝试像一个并发的HTTP客户端百头巨怪或类似的事件触发HTTP客户端EM-HTTP请求 。 对于这些,你必须手动实现tag_recent_media方法是在Instagram的宝石。



Answer 2:

有喜欢产卵的宝石,在一个分叉过程中或在你的过程中一个新的线程做..这里是另一个SO后,讨论它的链接

是什么分叉,并在后台线程进程之间的区别?

这是有问题的宝石: https://github.com/tra/spawnling



文章来源: Ruby on Rails Multiple HTTP request at the same time?