0

我正在使用delayed_job创建大量作业,几乎一次全部完成,稍后再完成,如果作业数量太多,在一定时间后,每个作业都会从队列中清除,不管它的状态。

以下 rails 项目说明了这个问题: https ://github.com/hayksaakian/taskbreaker

要重新创建问题,请创建多个任务(例如 5 到 15 个),每个任务都有大约 100 个目标(来自 Web 界面或控制台)

然后在控制台尝试执行这些任务:Task.attempt_tasks

将会发生以下情况:将创建许多工作,工人做他们的事情几分钟,然后每个工作都从队列中消失。

要验证是否是这种情况,请检查任何任务,您会注意到每个成就可能没有一个等于“10”的任意数字(它应该是 10,因为我们为每个延迟的尝试字符串调用增加 1)。每个成就的任意数组的长度也不为 10(它应该是,因为我们延迟了 10 次对尝试数组的调用);

我不确定为什么会发生这种情况,因为我没有看到任何错误,但我确信它正在发生。

在 taskbreaker.herokuapp.com 上查看一个糟糕的工作示例

请注意,如果有任何帮助,我将托管在 heroku 上。此外,您需要至少 5 名工作人员在任何合理的时间内重新创建问题。

4

1 回答 1

0

这是由于比赛条件。由于这些方法是同时发生的,因此它们的读取和写入是重叠的,从而导致了意外的输出。

于 2012-11-28T21:18:55.760 回答