【问题标题】:Task queue filled任务队列已满
【发布时间】:2011-03-31 16:59:37
【问题描述】:

我使用任务队列向用户发送未来的提醒。每个任务都非常小,但不知何故发生了这种情况,我的应用程序关闭了:

有什么可能导致这种情况的想法吗?

更新

大约 30 分钟后,我收到了一份截然不同的报告。

“队列中的任务”计数几乎相同,但“任务队列存储的任务计数”突然少了很多。 :o

只是为了清楚我做了什么:

  • 我清除了“删除”任务,该任务占用了大量 CPU,但其中只有 16 个小任务,因此它应该不会真正影响队列的大小。

  • 捕获了当您尝试将任务添加到完整队列时发生的异常。这根本不应该影响添加的任务数量。

  • 浏览 Reddit 半小时。这解决了它。

【问题讨论】:

  • 是的,我显然做错了什么,但我不知道这么少的任务怎么会占用这么多空间。
  • 您知道可以增加分配给任务队列的存储空间吗?

标签: google-app-engine


【解决方案1】:

听起来你的任务队列代码中有一个“叉子炸弹”。

如果在任务中添加任务,如果在添加任务后引发异常,则可能会意外创建大量任务。重试原始任务,再次添加新任务(并且可能自己做炸弹),再次引发异常,重试任务,等等。

防止这种情况的一种方法是给新任务一个特定的名称,这样它就不会被添加到队列中两次。

Brett Slatkin 在他的一次 Google I/O 讲座中谈到了这一点(here at 7:58)。

【讨论】:

  • +1 叉子炸弹,我在第一次 Gae 实验中就看到了这个确切的问题 :)
【解决方案2】:

我遇到了这个问题,但我在短时间内排队了数千个任务。 如果您觉得您的代码没有任何问题,那么只需增加任务队列存储的任务字节的配额。 在您的 queue.yaml 中包含这些行以更改配额

total_storage_limit: 300M

【讨论】:

    猜你喜欢
    • 2011-06-15
    • 1970-01-01
    • 1970-01-01
    • 2015-10-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多