我正在使用命令行工具 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/