App Engine任务队列中的TombstonedTaskError是什么?

36

TombstonedTaskError 是什么意思?在尝试从 cron-job 添加任务到队列时,它被引发:

Traceback (most recent call last):
  File "/base/python_lib/versions/1/google/appengine/ext/webapp/__init__.py", line 501, in __call__
    handler.get(*groups)
  File "/base/data/home/apps/.../tasks.py", line 132, in get
    ).add(queue_name = 'userfeedcheck')
  File "/base/python_lib/versions/1/google/appengine/api/labs/taskqueue/taskqueue.py", line 495, in add
    return Queue(queue_name).add(self)
  File "/base/python_lib/versions/1/google/appengine/api/labs/taskqueue/taskqueue.py", line 563, in add
    self.__TranslateError(e)
  File "/base/python_lib/versions/1/google/appengine/api/labs/taskqueue/taskqueue.py", line 619, in __TranslateError
    raise TombstonedTaskError(error.error_detail)
TombstonedTaskError

搜索文档只有以下内容:

exception TombstonedTaskError(InvalidTaskError)
    Task has been tombstoned.

这并没有什么特别有用的信息。

我在App Engine代码中也找不到任何有用的东西。

1个回答

51

您之前已经添加过一个完全相同名称的任务。尽管该任务已经执行完成,但为了防止出现意外的重复,执行过的任务名称会被保存一段时间。如果您要分配任务名称,应该使用全局唯一的名称以避免这种情况发生。


3
为什么他们在旧任务完成后阻止添加相同名称的任务? 如果是这样,他们应该允许一种检查队列中有哪些任务的方法。 - Krzysztof Krasoń
2
@krzyk 因为否则会出现竞争条件,即在任务完成时刚好添加了具有该名称的任务。任务名称的目的是防止重复执行。 - Nick Johnson
"一段时间"有多长?几分钟?几小时?几天? - JJ Geewax
2
@jgeewax 通常是7天。但是你不应该依赖这个规则。 - Nick Johnson
TaskAlreadyExistsError 有时也会被引发。这两个异常之间有什么区别? - ema
@ema 当使用相同名称的任务已经在队列中时,将抛出TaskAlreadyExistsError错误。当该名称曾用于先前执行的任务时,则会抛出TombstonedTaskError错误。 - Nick Johnson

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接