我拉着多个请求(其拉一次一个),我想知道如果有一种方法引入请求都在同一时间,如果我有这样的事情:
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
。 我在想,如果有一种方法可以做到这样的,因此它可以做到的要求一次全部(一起),而不是一个结束请求,然后继续下一个请求,等等...
谢谢!
是! 对于证据的概念,尝试
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的宝石。
有喜欢产卵的宝石,在一个分叉过程中或在你的过程中一个新的线程做..这里是另一个SO后,讨论它的链接
是什么分叉,并在后台线程进程之间的区别?
这是有问题的宝石: https://github.com/tra/spawnling