什么时候可以在googleappengin中抛出deadlineexceederror异常

2024-04-25 01:56:16 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在写一个延迟的任务,目的是在blobstore中构造一个文件以供下载。我根据文档中给出的示例对代码进行建模:

http://code.google.com/appengine/articles/deferred.html

这样做的目的是构造代码,以便在出现死线异常错误时,处理程序可以整理并启动一个新的延迟任务,以便稍后继续。在

我想知道的是这个异常到底什么时候可以抛出?是否有任何操作被保证是原子的,因此不会被中断?在

在上面提到的例子中,他们在完成对每条记录的处理后更新一个名为start_key的变量,但是假设主循环在to_put和to_delete列表的扩展之间被中断,那么数据将是错误的,因为它会错过一组删除操作。在

如果异常可以在任何时候引发,那么它可能在批处理写入的中途,或者在数据库输出清除待售清单。在

这在逻辑上等同于线程安全问题,要解决它,通常需要保证原子操作和非原子操作。在

这是怎么回事?在

谢谢


Tags: 文件to代码文档目的comhttp示例
1条回答
网友
1楼 · 发布于 2024-04-25 01:56:16

死线exceededError可以随时抛出。如果有一段时间它不能被抛出,一个滥用的应用程序可以简单地在一个循环中执行该代码。在

您可以通过以下几种方法避免这种情况:

  1. 主动检查你已经执行了多长时间,并在你到达截止日期之前的一个好时机停止。在
  2. 将异常处理程序放在它可以存储最后一组已完成操作的状态的位置(例如,丢弃从抛出异常的外循环的最后一次迭代以来的任何内容)
  3. 使用没有截止日期的后端。在

相关问题 更多 >