首页 > 解决方案 > Google Cloud Run 中的@response.call_on_close 问题

问题描述

我正在尝试在 Google Cloud Run 上编写一个使用 @response.call_on_close 的脚本,向调用者发送一个中间返回并在此之后进行一些处理,这样调用者就不会一直等待。

该脚本涉及 Selenium 的使用,它在本地 Cloud Run 中运行良好,但在实际云上部署时,我收到“devToolsActivePort 文件不存在”错误。

当我注释掉所有@response.call_on_close部分并直接调用它时,它也可以正常工作,所以它与Selenium无关,装饰器部分肯定有问题但我无法弄清楚。

这是我用来拨打电话的代码:

from flask import Flask, request
from scraper import scrap


app = Flask(__name__)

 @app.after_request
 def response_processor(response):

     request_json = request.get_json()
     keyword = request_json['keyword']
     tztimezone = request_json['tztimezone']

    @response.call_on_close
    def process_after_request():
         scrap(keyword, topic, tztimezone)
    return response

@app.route("/", methods=['GET', 'POST'])
def main():
    if request.method != 'POST':
        return 'Only POST requests are accepted', 405
    return ''

任何帮助将不胜感激。

谢谢!

标签: pythonflaskgoogle-cloud-run

解决方案


向客户端返回响应后,您无法执行 CPU 处理。

一旦您返回响应,Google Cloud Run 就会认为服务请求已完成。CPU 将为您的容器进入睡眠状态,直到下一个请求。

此链接将有所帮助:

Cloud Run 上容器的生命周期


推荐阅读