我正在写一个延迟的任务,目的是在blobstore中构造一个文件以供下载。我根据文档中给出的示例对代码进行建模:
http://code.google.com/appengine/articles/deferred.html
这样做的目的是构造代码,以便在出现死线异常错误时,处理程序可以整理并启动一个新的延迟任务,以便稍后继续。在
我想知道的是这个异常到底什么时候可以抛出?是否有任何操作被保证是原子的,因此不会被中断?在
在上面提到的例子中,他们在完成对每条记录的处理后更新一个名为start_key的变量,但是假设主循环在to_put和to_delete列表的扩展之间被中断,那么数据将是错误的,因为它会错过一组删除操作。在
如果异常可以在任何时候引发,那么它可能在批处理写入的中途,或者在数据库输出清除待售清单。在
这在逻辑上等同于线程安全问题,要解决它,通常需要保证原子操作和非原子操作。在
这是怎么回事?在
谢谢
死线exceededError可以随时抛出。如果有一段时间它不能被抛出,一个滥用的应用程序可以简单地在一个循环中执行该代码。在
您可以通过以下几种方法避免这种情况:
相关问题 更多 >
编程相关推荐