1

我有一個函數可以讓很多HTTP請求收集數據並將其存儲在數據存儲中。所有的調用都必須成功,否則所有的事情都必須回滾。執行時間的長度接近10分鐘。應用引擎上的最大交易截止日期似乎默認爲60秒。有沒有辦法在App Engine中實現長時間運行的事務?

有沒有辦法增加這個,從而使功能交易?

回答

1

看起來這是不可能的。從文檔:

最大時間(以秒爲單位)等待數據存儲在中止並返回錯誤之前返回結果。接受整數或浮點值。 不能設置爲高於默認值(60秒),但可以向下調整以確保特定操作快速失敗(例如,向用戶返回更快的響應,重試操作,嘗試其他操作,或將操作添加到任務隊列中)。

https://developers.google.com/appengine/docs/python/datastore/functions#create_transaction_options

然而,只有當交易成功完成時,如果這是任何使用可以觸發一個任務。

https://developers.google.com/appengine/docs/python/datastore/transactions#Transactional_Task_Enqueuing

你可以排隊一個任務作爲數據存儲區事務,使得任務只排隊,並保證被排隊,如果交易成功提交的一部分。如果事務沒有被提交,則任務被保證不被排隊。如果事務確實被提交,則該任務被保證被排隊。

0

持續10個分鐘的請求,您需要使用後端

Backends (Python)

本參考介紹瞭如何利用App Engine後端在Python中。後端是特殊的App Engine實例,它們沒有請求最後期限,更高的內存和CPU限制以及跨請求的持久狀態。它們由App Engine自動啓動,並可以長時間連續運行。每個後端實例都有一個唯一的URL用於請求,並且可以跨多個實例負載平衡請求。

後端可以處理來自用戶或應用程序其他部分的HTTP請求,在後臺啓動並連續運行,或由任務隊列任務或Cron作業驅動。上面的鏈接描述瞭如何配置後端,使用它們的最佳實踐以及App Engine如何爲它們提供支付。

+0

雖然後端不提交交易,所以我不認爲這將工作嗎? – user1561108

+1

獲取數據需要10分鐘嗎?你不能在後端獲取數據,然後一旦你知道所有的調用都成功了,那麼將數據存儲在一個事務中?我並不是建議後端可以延長交易限制。我建議在交易嘗試之前在後端準備數據。 – user1258245

相關問題