1

我有一个函数可以发出许多 HTTP 请求来收集数据并将其存储在数据存储中。所有调用都必须成功,否则一切都必须回滚。执行时间接近 10 分钟。应用引擎上的最大交易期限似乎是默认的 60 秒。

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

4

3 回答 3

1

看起来这是不可能的。从文档:

在因错误中止之前等待 Datastore 返回结果的最长时间(以秒为单位)。接受整数或浮点值。不能设置为高于默认值(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

您可以将任务作为 Datastore 事务的一部分加入队列,这样该任务仅在事务成功提交的情况下才会加入队列并保证加入队列。如果事务未提交,则保证不会将任务排入队列。如果事务确实被提交,则保证任务被排队。

于 2012-09-23T21:45:48.867 回答
0

在前端实例中没有。

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

于 2012-09-23T21:47:54.983 回答
0

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

后端(Python)

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

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

于 2012-09-23T21:47:55.553 回答