Python 何时可以在Google应用程序引擎中引发DeadlineExceededError异常
我正在编写一个延迟任务,它打算在blobstore中构建一个文件以供下载。我根据文档中给出的示例对代码进行建模: 这样做的目的是构造代码,以便处理程序可以整理并启动新的延迟任务,以便稍后继续 我想知道的是什么时候可以抛出这个异常?是否有任何操作保证是原子的,因此不会被中断 在上面的示例中(参考),他们在完成处理每个记录时更新一个名为start_key的变量,但如果主循环在扩展to_put和to_delete列表之间中断,那么数据将是错误的,因为它将丢失一组删除 如果可以在任何时候引发异常,那么它可能在批处理写入的中途,或者在db.put和清除to_put列表之间 这在逻辑上相当于线程安全问题,要解决它,通常需要保证原子操作和非原子操作 这是怎么回事Python 何时可以在Google应用程序引擎中引发DeadlineExceededError异常,python,google-app-engine,Python,Google App Engine,我正在编写一个延迟任务,它打算在blobstore中构建一个文件以供下载。我根据文档中给出的示例对代码进行建模: 这样做的目的是构造代码,以便处理程序可以整理并启动新的延迟任务,以便稍后继续 我想知道的是什么时候可以抛出这个异常?是否有任何操作保证是原子的,因此不会被中断 在上面的示例中(参考),他们在完成处理每个记录时更新一个名为start_key的变量,但如果主循环在扩展to_put和to_delete列表之间中断,那么数据将是错误的,因为它将丢失一组删除 如果可以在任何时候引发异常,那么
谢谢任何时候都可以抛出一个deadlineexcedederror。如果有一段时间它不能被抛出,滥用的应用程序可以简单地在循环中执行该代码 您可以通过以下几种方式避免这种情况:
谢谢你的回复。这正是我所猜测的,但通常我仍然希望会有一些原子操作,相当于比较和交换。这通常是安全的,因为即使在循环中执行,也可以中断。我想这是脚本语言中比较困难的事情之一。我在本例中选择的解决方案是使用_target=参数在后端运行延迟任务。从成本爆炸的角度来看,这有点危险,但在我的例子中是有效的。似乎在调用类函数时,如果异常中断,则可以保证调用exit。@Jules这仅适用于与
with
语句一起使用的上下文对象,而不适用于硬截止日期异常。正如我所说,如果有任何代码是不可中断的,滥用的应用程序可以利用它。但是,请注意,标准异常处理程序可以捕获“软”截止日期超出错误。