【问题标题】:GAE: how to properly handle google shutting down a backend instance?GAE:如何正确处理谷歌关闭后端实例?
【发布时间】:2014-05-23 02:38:39
【问题描述】:

是否有关于如何正确编写 GAE 处理关闭的后端/模块的教程?

这是我得到的错误:

2014-04-09 12:15:44.726 Process terminated because the backend took too long to shutdown.

我有一个需要几个小时的过程,我知道我基本上必须将状态保存到内存缓存中,然后重新启动它。

是否有以下教程: 1)如何处理关闭请求 2)如何保存到memcache 3) 如何重启一个模块

1) 和 2) 看起来很简单...重新启动模块是我不确定的事情。我的模块作为 cron 作业启动,但是有没有办法使用关闭请求来触发我的模块的另一个实例启动?

【问题讨论】:

    标签: python google-app-engine module backend


    【解决方案1】:

    如果您有大量工作需要处理大量数据,那么您可以查看map reduce

    无论如何,您应该将大型工作分解为较小的幂等任务。幂等(没有副作用)基本上意味着您可以重新运行任务以获得相同的结果。

    一旦您有较小的任务,您就可以选择通过任务队列安排它们或使用 map reduce 框架。

    注意事项:

    1. 不能保证您会收到关闭回调。我们的后端实例每天都会重新启动,并且不会调用我们的关闭挂钩。
    2. Memcache 不可靠。不要将其视为永久存储。

    【讨论】:

    • 感谢您的回复——这样我就可以轻松地并行化我的代码了……我是否有一个脚本可以单独调用任务队列来执行较小的任务?基本上,该脚本需要从远程服务器下载一个文件(约 150mb 压缩... 500mb 解压缩)并处理存档中的每个文件(约 40,000 个文件)。我会启动 40,000 个任务来处理每个文件吗?
    • 在前端实例上运行的任务有 10 分钟的限制(尽管后端实例没有限制)。您应该分解任务以适应此执行时间范围。
    • 刚刚完成将脚本更改为使用任务队列——使工作突飞猛进更容易。谢谢你的帮助,我真的很感激。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-03
    • 1970-01-01
    相关资源
    最近更新 更多