我寫它的目的是建立一個文件中的Blob存儲區下載遞延任務被拋出。我造型上的文檔中給出的示例代碼:時候可以DeadlineExceededError例外,在谷歌應用程序引擎
http://code.google.com/appengine/articles/deferred.html
的想法是結構上的代碼,這樣,如果有一個DeadlineExceededError處理程序可以整理和啓動新遞延任務繼續後來。
我想知道的是,當正好可以在這個異常被拋出?是否有任何保證是原子的操作,因此不會中斷?
在上面的例子中,他們更新了一個叫做start_key的變量,因爲他們完成了每條記錄的處理過程,但是說主循環在to_put和to_delete列表之間中斷了,那麼數據就會出錯,確實錯過了一組刪除。
如果異常可以在任何時候得到提升,則可能是中途batch_write之間,或to_put列表db.put和清算。
這是邏輯上等同於一個線程安全的問題,解決這個問題一個正常保證了原子操作和非原子操作。
這是如何工作的?
謝謝
感謝您的答覆。這正是我所猜測的,但通常我仍然會期待有一些原子操作,相當於比較和交換。這通常是安全的,即使在循環中執行它可能會中斷。我想這是腳本語言中更困難的事情之一。 – Jules 2012-01-16 11:06:27
我選擇的解決方案是使用_target =參數在後端運行我的延期任務。從成本爆炸的角度來看,這有點危險,但在我的案例中是有效的。 – Jules 2012-01-16 11:25:39
看起來,當調用類函數時,如果異常中斷它,保證調用__exit__。 – Jules 2012-01-17 16:11:48