ruby-on-rails - 在 Ruby 中并行运行命令行进程

标签 ruby-on-rails ruby-on-rails-3 command-line parallel-processing phantomjs

我正在使用命令行工具 PhantomJS 来呈现网站图像,我想并行运行其中的多个,而不是一个接一个地运行。我该怎么做?

最佳答案

这是一个使用 Resque 的例子.请注意,为简洁起见,我没有进行转义...您应该永远不要将外部输入直接传递到 shell 命令中。

class RasterizeWebPageJob
  @queue = :screenshots
  def self.perform(url)
    system("/usr/bin/env DISPLAY=:1 phantomjs rasterize.js #{url} ...")
  end
end

10.times { Resque.enqueue(RasterizeWebPageJob, "http://google.com/") }

如果您正在运行足够多的工作器(并且有可用的工作器),它们将并行执行。这里重要的是您将单独的作业放入队列,而不是在一个作业中处理多个屏幕截图。

我建议不要在 Rails Controller 中使用 Thread.new。队列比线程管理起来更容易(也更安全)。

关于ruby-on-rails - 在 Ruby 中并行运行命令行进程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6476019/

相关文章:

ruby-on-rails-3 - Rails 3验证程序和i18n

ruby-on-rails-3 - Gem Install PG 神秘报错extconf.rb相关

ruby-on-rails - 使用render_to_string后如何正常渲染 View ?

linux - Bash:我如何从文件中选择列中具有特定值的行

C++ 命令行 "Operation not allowed in WOW64"

command-line - 如何使用inkscape命令行界面?

css - Glyphicons Pro 图标在 Rails 4.2/Bootstrap 中无法正确显示

ruby-on-rails - rails 3.2.11 : Weird behaviour because of loading order of Controller and model

ruby-on-rails - 在 rails 中用 has_many 计数

ruby-on-rails - 测试 twilio API