Не изменяется глобальная переменная
Пишу клиентскую часть на FastAPI и Websockets. Объявляю глобальный объект вебсокета, первое подключение проходит нормально, но при подъёме FastAPI объект вебсокета выбивает None. Код клиента на Python:
import websockets
import asyncio
import json
import logging
import sys
from datetime import datetime
from typing import Iterator
from fastapi import FastAPI
from fastapi.requests import Request
from fastapi.responses import HTMLResponse, StreamingResponse
from fastapi.templating import Jinja2Templates
from starlette.responses import Response
import time
import uvicorn
#from write_to_scv import write_to_scv
recording_period = 0.001 # период записи данных в .csv
websocket_connection = None
logging.basicConfig(stream=sys.stdout, level=logging.INFO, format="%(asctime)s %(levelname)s %(message)s")
logger = logging.getLogger(__name__)
application = FastAPI()
templates = Jinja2Templates(directory="templates")
async def establish_websocket_connection():
global websocket_connection
websocket_connection = await websockets.connect("ws://192.168.1.10")
print(websocket_connection)
@application.get("/", response_class=HTMLResponse)
async def index(request: Request) -> Response:
print(websocket_connection)
if websocket_connection is not None:
return templates.TemplateResponse("index.html", {"request": request})
else: return templates.TemplateResponse("error.html", {"request": request})
async def generate_random_data(request: Request) -> Iterator[str]:
client_ip = request.client.host
logger.info("Client %s connected", client_ip)
fixed_time = time.time()
while True:
date = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
value = await websocket_connection.recv()
shock_sensor = value[0]
voice_sensor = value[1:]
json_data = json.dumps(
{
"time": date,
"shock_sensor": shock_sensor,
"voice_sensor": voice_sensor,
}
)
yield f"data:{json_data}\n\n"
current_time = time.time()
if current_time - fixed_time > recording_period:
#write_to_scv(date, voice_sensor)
fixed_time = time.time()
await asyncio.sleep(0.0005)
@application.get("/chart-data")
async def chart_data(request: Request) -> StreamingResponse:
response = StreamingResponse(generate_random_data(request), media_type="text/event-stream")
response.headers["Cache-Control"] = "no-cache"
response.headers["X-Accel-Buffering"] = "no"
return response
if __name__=="__main__":
asyncio.run(establish_websocket_connection())
uvicorn.run("test:application", port=80)
Подскажите, пожалуйста, в чём может быть проблема. Заранее спасибо за уделённое время!