Не изменяется глобальная переменная

Пишу клиентскую часть на 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)

Подскажите, пожалуйста, в чём может быть проблема. Заранее спасибо за уделённое время!


Ответы (0 шт):