有没有办法在App Engine中实现长时间运行的事务?

时间:2012-09-23 21:30:03

标签: python google-app-engine transactions google-cloud-datastore long-running-processes

我有一个函数可以使许多HTTP请求收集数据并将其存储在数据存储区中。所有调用必须成功,否则必须回滚所有内容。执行时间长度接近10分钟。应用引擎上的最长交易截止日期似乎是默认的60秒。

有没有办法增加这个,从而使函数具有事务性?

3 个答案:

答案 0 :(得分: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

  

您可以将任务排队作为数据存储区事务的一部分,这样只有在事务成功提交的情况下,该任务才会排队并保证排队。如果事务未提交,则保证任务不会入队。如果事务确实已提交,则保证任务被排队。

答案 1 :(得分:0)

在前端实例中。

您需要为此创建一个后端实例: https://developers.google.com/appengine/docs/python/backends/overview

答案 2 :(得分:0)

对于10分钟的请求,您需要使用后端

Backends (Python)

此参考介绍如何在Python中使用App Engine后端。后端是特殊的App Engine实例,没有请求截止日期,更高的内存和CPU限制,以及跨请求的持久状态。它们由App Engine自动启动,可以长时间连续运行。每个后端实例都有一个用于请求的唯一URL,您可以跨多个实例对请求进行负载平衡。

后端可以处理来自用户或应用程序其他部分的HTTP请求,在后台连续启动和运行,或者由任务队列任务或Cron作业驱动。上面的链接描述了如何配置后端,使用它们的最佳实践以及App Engine如何为它们收费。