首页 > 解决方案 > 如何在 python 3 Google App Engine 标准环境中进行后台工作?

问题描述

我的 appengine 应用程序 ( /start) 上有一个端点,用于启动进程。在 python 2 环境中,我曾经deferred在请求上下文之外运行进程。在 appengine flex 上,您可以运行位于请求环境之外的后台线程。乍一看,我以为python 3 标准环境也是如此,但仔细一看,它包含以下注释:

但是请注意,在处理入站请求后,新线程或进程可能不会运行。

这是否意味着一旦请求得到服务,我启动的后台线程将被杀死?如果是这样,开始后台工作的最佳方式是什么?

我可以通过在云任务中创建队列并腌制所有内容来重新创建deferred库,但这是最后的手段。

标签: python-3.xgoogle-app-enginegoogle-app-engine-python

解决方案


从App Engine 标准环境指南上的了解 Python 2 和 Python 3 之间的差异的任务队列部分:

您可以使用Cloud Tasks(测试版)访问任务队列服务。

在拉队列适用的情况下,例如排队任务或消息,这些任务或消息将由单独的工作人员拉取和处理, Cloud Pub/Sub可能是一个不错的选择。Cloud Pub/Sub 提供类似的功能和交付保证。

所以是的,云任务是推荐的解决方案。

但是您实际上并不需要重新创建deferred库 - 该库是在推送任务队列之上构建的。库相对于推送任务的唯一优势deferred是您不必为任务预先注册处理程序(您只需传递要执行的函数及其参数)。但对于云任务而言,情况并非如此——它们确实需要GAE 处理程序


推荐阅读