ruby 使用赛璐珞将长时间运行的请求并行化

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ruby 使用赛璐珞将长时间运行的请求并行化相关的知识,希望对你有一定的参考价值。

require 'celluloid'
require "benchmark"
require 'open-uri'

delay_seconds = [4,4,4,4,4,4]
BASE_URL = "http://slowapi.com/delay"

class Crawler
  include Celluloid
  def read(delay)
    url = "#{BASE_URL}/#{delay}"
    open(url) { |x| x.read }
  end
end

pool = Crawler.pool(size: delay_seconds.length)

time = Benchmark.measure do
  crawlers = delay_seconds.map do |delay|
    begin
      pool.future(:read, delay)
    rescue DeadActorError, MailboxError
    end
  end
  result = crawlers.compact.map { |crawler| crawler.value rescue nil }
end

#result.each_with_index {|i,v| puts "Response ##{v}: #{i}"}  
puts time

以上是关于ruby 使用赛璐珞将长时间运行的请求并行化的主要内容,如果未能解决你的问题,请参考以下文章

ruby LolConcurrency :: Actor制作自己的赛璐珞

在后台运行长时间运行的并行任务,同时允许小型异步任务更新前台

ruby 在长时间运行的shell命令后通知

通过将命令行工具包装在带有 gnu 信号量的 bash 脚本中来并行化命令行工具

通过将长时间运行的任务拆分为单独的进程来提高程序性能

并行化 AWS Lambda 的最佳方式