【问题标题】:How to run n jobs each x time with delayed job gem?如何使用延迟的作业 gem 每次运行 n 个作业?
【发布时间】:2011-10-18 14:39:49
【问题描述】:

我的问题是如何使用延迟作业 gem 每 n 秒运行 x 数量的作业?

例子

我想发送大量的时事通讯。但是,当我发送 #50(“示例”)邮件时,GMail 不会发送电子邮件(垃圾邮件),但其内容有点不同。

因此,如果我每 3 分钟按 20 个用户组发送时事通讯,GMail 可能会正确发送电子邮件。

提前致谢

【问题讨论】:

    标签: ruby-on-rails delayed-job


    【解决方案1】:

    delayed_job 有一个选项:run_at(https://github.com/collectiveidea/delayed_job),您可以使用它来设置作业应该在什么时间运行。它不能保证作业是否会在那个时候运行,但它肯定不会在那之前运行。

    因此,20 封邮件/3 分钟 = 1 封电子邮件/9 秒。

    你可以这样做:

    now = Time.now
    count = 0
    # then for each newsletter schedule it at intervals of 9 secs
    users.each do |u|
      WhateverMailer.delay(:run_at => now + count*9).news_letter(u)
      count += 1
    end
    

    【讨论】:

      【解决方案2】:

      您可以使用基于云的调度和后台处理服务 SimpleWorker 来执行此类操作。它提供了类似于 DelayedJob 的功能,但无需管理服务器和队列。 (我在 Iron.io 工作,SimpleWorker 的制造商)。

      您可以安排一个作业每 X 秒运行一次或安排多个作业在特定时间进入队列(不同的优先级具有不同的目标运行窗口)。但是,您可能希望拥有一个或多个定期运行的主作业,然后将一个或多个从属作业排队以发送实际的电子邮件,而不是预先安排大量作业(每个作业都检查数据库以获取下一组发送)。

      当面临通过 API 获取数据的阈值时,您可以使用相同的方法。如果您愿意,很乐意进一步讨论。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-10-22
        • 2012-01-25
        • 2011-12-24
        • 2017-01-03
        • 1970-01-01
        • 1970-01-01
        • 2012-03-29
        • 1970-01-01
        相关资源
        最近更新 更多