我正在嘗試撰寫一個在 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 ''
任何幫助將不勝感激。
謝謝!
uj5u.com熱心網友回復:
向客戶端回傳回應后,將無法執行 CPU 處理。
一旦您回傳回應,Google Cloud Run 就會認為服務請求已完成。CPU 將讓您的容器進入休眠狀態,直到下一個請求。
此鏈接將幫助:
Cloud Run 上容器的生命周期
uj5u.com熱心網友回復:
Cloud Run 剛剛獲得了一項新功能:Always on cpu以禁用 CPU 節流。
但是,您只想在處理請求時支付處理時間,您將為實體付費,直到它被卸載(收到最新請求后大約 15 分鐘)。
但是,您有 CPU 和記憶體成本折扣(25% 和 20%)
當心:
如果您的后臺作業耗時超過 15 分鐘并且實體沒有收到新請求,它將被卸載并終止您的作業。此功能旨在在請求結束后的幾秒鐘內繼續該程序。
Cloud Run 團隊不保證 15 分鐘(通常觀察到),尤其是在平臺對新 Cloud Run 實體有大量需求的情況下。
在這種情況下,您可以將此功能與最小實體功能結合使用。我們可以進一步討論這種設計的不同權衡。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/328583.html
