2013-03-04 158 views
0

我有一个resque工作类,负责生成用户活动报告。该类查询数据库,然后执行大量的计算/数据解析来向某些人发送电子邮件。我的问题是,应该像这样的resque作业,有许多方法(200行左右的代码),填充所有类方法并响应单个ResqueClass.perform方法?或者,我是否应该实例化这个resque类的新实例来表示正在生成的单个报表?如果两种方法都能正确计算数据并通过电子邮件发送,那么对于如何处理后台作业,是否有一个惯例或最佳做法?Ruby on Rails,Resque

谢谢你

回答

1

两种策略都是有效的。我通常从并发的角度来看待这个问题。当你的工作正在运行时,为你的工作提供服务的resque worker很忙,所以如果你有N个worker和N个这些工作正在运行,那么你必须等到一个完成之后才能处理队列中的其他任务。

也许没关系 - 如果你一次只有一份报告,那么你实际上会专门委派一名工作人员来运行报告,你的其他人可以做其他事情。但是,如果你有一堆这些,这需要一段时间,你可能会影响队列中的其他工作。

缺点是,如果您的报告死亡,您可能需要逻辑来提取您离开的位置。如果您为每个用户实例化一次报告,则只需重试失败的作业 - 不需要“我在哪里”逻辑。

+0

谢谢,非常有帮助 – BC00 2013-03-04 22:12:06