【问题标题】:Moving web crawler into background: Resque or Sidekiq将网络爬虫移到后台:Resque 或 Sidekiq
【发布时间】:2012-10-05 02:24:51
【问题描述】:

我有一个 Rails 应用程序,它允许用户上传一个 CSV 文件,其中包含一个要抓取的 URL 列表(有时是 200k)。然后在控制器中,我将转到该文件的每一行,然后调用另一个带有 URL 和一些参数的方法,然后当 crawl 方法完成后,将一些变量保存到几个模型中。下面是我的控制器的样子:

def import
  if request.post? && params[:inputfile].present?
    infile = params[:inputfile].read
    CSV.parse(infile) do |row|
      @crawler = Crawler.new(row[0])
      @crawler.crawl #do the actual crawling using Mechanize Gem and set a few variable in the crawler object
      #when crawl is done save a few stuff into some models
    end
  end
end

我需要将其移至后台(因此此过程不会占用我的整个 rails 应用程序),并且能够异步运行每一行的代码。我在想像把所有东西都放在一个队列中,并在每一行的队列中排队......或者类似的东西。我在想我可以为此使用 Resque 或 Sidekiq 吗?如果是,我应该从哪里开始?

【问题讨论】:

    标签: ruby-on-rails background-process resque sidekiq


    【解决方案1】:

    听起来您已经进行了足够多的挖掘,最终朝着正确的方向前进!我也会把它考虑到一个单独的后台工作系统中。

    Sidekiq 现在维护得更好,多线程对您的用例非常有用,所以我会选择它。很好的起点是the Sidekiq homepagethis Railscast,它们都可以为您提供大量信息以帮助您快速上手。

    【讨论】:

    • 我有一个问题,可以在另一个队列中设置一个队列吗?我看到了 Railscast 和 sidekiq 主页/github,我看到的例子很简单。我正在寻找更复杂的东西,比如嵌套队列之类的东西?如果你明白我的意思,请告诉我。
    • 工人在处理过程中将额外的工作排入队列并不罕见。这不是每个 sé 的嵌套队列(就 Sidekiq/Resque/而言,队列仍然是独立的),但我认为这是你想要的。回到您的示例,处理 CSV 可能是一项为每一行启动爬虫作业的作业。
    • 这正是我想要的......我会进入的。谢谢。
    猜你喜欢
    • 1970-01-01
    • 2012-09-12
    • 2012-07-31
    • 1970-01-01
    • 2011-12-11
    • 1970-01-01
    • 1970-01-01
    • 2018-08-12
    • 2012-08-01
    相关资源
    最近更新 更多