【问题标题】:Why does the task name contain "now / 30"?为什么任务名称中包含“now / 30”?
【发布时间】:2025-11-28 22:20:07
【问题描述】:

在来自“使用 Google App Engine 的数据管道”的视频/PDF 中,Brett 将“now / 30”放入任务名称中,并指出他稍后会解释原因,但不知何故他从来没有这样做过。 :)
http://www.youtube.com/watch?v=zSDC_TU7rtc#t=41m35

task_name = '%s-%d-%d' % (sum_name, int(now / 30), index)

你知道原因吗?与不能重复使用任务名称的 7 天期限有关系吗?

Link to the session page

【问题讨论】:

  • 不要在主题行中重复标签。这是不必要的。
  • 我不确定人们是否阅读标签,所以我不想在询问时过于含糊。但是好的,谢谢。 :)
  • google 索引时是否特别对待标签?如果没有,标题中的所有关键字不会增加页面排名吗?

标签: google-app-engine task-queue


【解决方案1】:

Brett Slatkin's own explanation

[布雷特]
大家好,

任务名称的 int(time.time()/30) 部分是为了防止队列停顿。当 memcache 被驱逐时,工作索引计数器将重置为零。这意味着新的 fork-join 工作项可能会插入与已插入的任务命名相同的任务。通过在任务名称中包含约 30 秒的时间窗口,我们确保此问题只能持续约 30 秒。这也是为什么在看到 TombstonedTaskError 异常时应该引发异常的原因。

如果时钟不稳定,最坏的情况是运行两个任务来完成扇入工作,而不是只运行一个,这在许多情况下是可接受的权衡,也是使用任务队列 API 时的基本可能性.这可以通过使用鸽洞确认实体来缓解,就像我在物化视图示例中使用的那样。

希望对您有所帮助,
[/布雷特]

【讨论】:

    最近更新 更多