提问人:Rudolph Sargenti 提问时间:11/17/2023 最后编辑:Rudolph Sargenti 更新时间:11/17/2023 访问量:19
GCP Cloud Run Flask 应用已启动但未发布数据?
GCP Cloud Run Flask app starting but not publishing data?
问:
我有一个 Cloud Run 服务,其运行方式如下:
- 运行状况检查连接到“/”端点,flask 检测到此点并重定向到“/start”。
- 连接到“/start”,这将启动一个异步 main() 函数。
- 主要功能有一个 WebSocket 客户端连接到第三方服务器并等待数据。
在本地(Windows PC)和docker linux环境中,这可以正常工作。但是,当推送到 Cloud Run 时,运行状况检查通过并且 gunicorn 启动,但我从未看到 main 函数启动。
我尝试过打印语句和 Google 日志,但都没有从 Cloud Run 打印,只能在本地打印。甚至没有任何错误陈述。Gunicorn 收到“term”信号并在几分钟后关闭,但 Cloud Run 服务将继续运行。独角兽不会重新启动。 编辑:我也在Cloud Run模拟器中运行了它,运行良好。
以下是 python 代码(出于隐私原因进行了总结):
import asyncio
import os
import json
#import pytz
from datetime import datetime
from websockets.client import connect
from websockets.exceptions import ConnectionClosed
from flask import Flask, redirect
from google.cloud import logging
app = Flask(__name__)
@app.route('/')
def health_check():
return redirect('/start')
@app.route('/start')
def start():
asyncio.run(main())
async def format_message(data):
#code for formatting and publishing data to pubsub Topic
async def main():
headers = {
"Authorization": "Bearer " + os.environ["API_KEY"],
"Sec-WebSocket-Version": "13",
"Connection": "Upgrade",
"Upgrade": "websocket",
"Host": "3rdparty:443"
}
async for websocket in connect(uri="wss://3rdparty:443/v1/stream?cid=our_host&type=message", extra_headers=headers):
try:
print("socket started", flush=True)
while True:
message = await websocket.recv()
await format_message(message)
except ConnectionClosed as e:
print(f"Connection closed: {type(e).__name__}: {e}", flush=True)
except Exception as e:
print(f"Error: {type(e).__name__}: {e}", flush=True)
这是我的 gunicorn 配置:
import os
workers = int(os.environ.get('GUNICORN_PROCESSES', '2'))
threads = int(os.environ.get('GUNICORN_THREADS', '4'))
bind = f"{os.environ.get('HOSTNAME', '127.0.0.1')}:{os.environ.get('PORT', '3000')}"
forwarded_allow_ips = '*'
secure_scheme_headers = { 'X-Forwarded-Proto': 'https' }
下面是 Dockerfile:
FROM python:3.10
API_KEY=SECRET_KEY \
PORT=8080 \
HOSTNAME=0.0.0.0 \
GUNICORN_THREADS=4 \
GUNICORN_PROCESSES=2 \
PYTHONUNBUFFERED=TRUE
EXPOSE 8080
COPY . /hsrb-proofpoint-pod-email-eds-avalon
WORKDIR /hsrb-proofpoint-pod-email-eds-avalon
RUN pip install -r requirements.txt
ENTRYPOINT ["gunicorn", "--config", "config.py", "main:app"]
答: 暂无答案
评论
/start