ruby - 有没有更好的方法在 Ruby 中异步发出多个 HTTP 请求?

标签 ruby http sendasynchronousrequest

我正尝试在 Ruby 中发出多个 HTTP 请求。我知道这可以很容易地在 NodeJS 中完成。我正在尝试使用线程在 Ruby 中完成它,但我不知道这是否是最好的方法。我没有成功运行大量请求(例如超过 50 个)。

require 'json'
require 'net/http'

urls = [
  {"link" => "url1"},
  {"link" => "url2"},
  {"link" => "url3"}
]

urls.each_value do |thing|
    Thread.new do
        result = Net::HTTP.get(URI.parse(thing))
        json_stuff = JSON::parse(result)
        info = json["person"]["bio"]["info"]

        thing["name"] = info
    end
end

# Wait until threads are done.
while !urls.all? { |url| url.has_key? "name" }; end

puts urls

有什么想法吗?

最佳答案

代替您使用的 while 子句,您可以调用 Thread#join 使主线程等待其他线程。

threads = []
urls.each_value do |thing|
    threads << Thread.new do
        result = Net::HTTP.get(URI.parse(thing))
        json_stuff = JSON::parse(result)
        info = json["person"]["bio"]["info"]

        thing["name"] = info
    end
end

# Wait until threads are done.
threads.each { |aThread|  aThread.join }

关于ruby - 有没有更好的方法在 Ruby 中异步发出多个 HTTP 请求?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17627250/

相关文章:

ruby-on-rails - 如何在 Ruby 或 Ruby in Rails 中使用带有计数器的拒绝

javascript - 日期字段 : how to set maximum date while using Bootstrap datepicker?

javascript - 有什么办法可以通过 jQuery 获取 HTTP 请求?

基于libevent或类似技术的Python http代理库?

iphone - 在 iOS 上,如何使 cell.imageView 刷新其内容?

ios - 处理多个 NSURL 连接的最佳方式

mysql - Redmine安装: Mysql gem say undefined symbol: mysql_init

linux - 给定 TCP/IP 校验和的 HTTP 1.1 Content-MD5 冗余?

python - 进行异步 API 调用时如何限制 Grequests?

ruby - 杰基尔 3.1.6 |错误:未初始化常量 Jekyll::Filters::URLFilters