【问题标题】:How can I do background work in python 3 Google App Engine standard environment?如何在 python 3 Google App Engine 标准环境中进行后台工作?
【发布时间】:2018-12-11 18:20:16
【问题描述】:

我的 appengine 应用程序 (/start) 上有一个端点,用于启动进程。在 python 2 环境中,我使用deferred 在请求上下文之外运行进程。在 appengine flex 上,您可以 run background threads 位于请求环境之外。乍一看,我以为这是 python 3 标准环境的also true,但仔细一看,里面有这个注释:

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

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

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

【问题讨论】:

    标签: python-3.x google-app-engine google-app-engine-python


    【解决方案1】:

    来自Understanding differences between Python 2 and Python 3 on the App Engine standard environment 指南的Task Queue 部分:

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

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

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

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

    【讨论】:

    • 感谢您的回复!所以是的,我知道 Cloud Tasks 是 Task Queues 的继承者。但是,我希望我可以完全避免使用它,而只是产生一个类似于 appengine flex 的后台线程。这不可能吗?
    • 不是真的,根据你引用的文档。
    • github.com/freshplanet/AppEngine-Deferred 应该可以移植到 GAE Py3
    猜你喜欢
    • 2018-03-12
    • 2018-07-01
    • 2019-08-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-26
    • 1970-01-01
    • 2019-01-30
    相关资源
    最近更新 更多