我有一个函数可以使许多HTTP请求收集数据并将其存储在数据存储区中。所有调用必须成功,否则必须回滚所有内容。执行时间长度接近10分钟。应用引擎上的最长交易截止日期似乎是默认的60秒。
有没有办法增加这个,从而使函数具有事务性?
答案 0 :(得分:1)
看起来这是不可能的。来自文档:
等待数据存储区在中止错误之前返回结果的最长时间(以秒为单位)。接受整数或浮点值。 不能设置为高于默认值(60秒),但可以向下调整以确保特定操作快速失败(例如,为了向用户返回更快的响应,重试操作,尝试不同的操作,或将操作添加到任务队列。)
https://developers.google.com/appengine/docs/python/datastore/functions#create_transaction_options
但是,当且仅当事务成功完成时(如果有任何用途),您可以触发任务。
您可以将任务排队作为数据存储区事务的一部分,这样只有在事务成功提交的情况下,该任务才会排队并保证排队。如果事务未提交,则保证任务不会入队。如果事务确实已提交,则保证任务被排队。
答案 1 :(得分:0)
在前端实例中。
您需要为此创建一个后端实例: https://developers.google.com/appengine/docs/python/backends/overview
答案 2 :(得分:0)
对于10分钟的请求,您需要使用后端
此参考介绍如何在Python中使用App Engine后端。后端是特殊的App Engine实例,没有请求截止日期,更高的内存和CPU限制,以及跨请求的持久状态。它们由App Engine自动启动,可以长时间连续运行。每个后端实例都有一个用于请求的唯一URL,您可以跨多个实例对请求进行负载平衡。
后端可以处理来自用户或应用程序其他部分的HTTP请求,在后台连续启动和运行,或者由任务队列任务或Cron作业驱动。上面的链接描述了如何配置后端,使用它们的最佳实践以及App Engine如何为它们收费。