Я пишу приложение фляги Python3 WSGI и запускаю его с помощью uwsgi. У него есть конечные точки, которые являются обработчиками веб-сокетов, использующими flask-uwsgi-websocket (GeventWebsocket). В этом веб-сокете серверная сторона периодически (каждые 3 секунды) отправляет сообщения клиенту. Если выполняется другая конечная точка, я хочу, чтобы это сообщение было доставлено немедленно.
Раньше у меня был цикл time.sleep(3)
"пока верно" в моих веб-сокетах, очевидно, что он не прерывался. Я попытался заменить его на threading.Cond()
, но заметил, что запуск uwsgi в режиме prefork означает, что существуют разные процессы, то есть разблокировка не работает. Я также пытался использовать asyncio, особенно yield from asyncio.sleep(3)
(оба с AsyncioWebSocket
и GeventWebSocket
), но это тоже не сработало. Понятно, я не знаю, что я делаю. Также я заметил, что ни одно из моих соединений Websockets не выгружается, если достаточное количество клиентов подключается к серверу, просто «зависает».
Учитывая, что приложение полностью зависит от меня, какой самый простой способ добиться чего, в идеале, с использованием устаревшей технологии (Python3.6, asyncio?) И как мне нужно, чтобы uwsgi запускал мое приложение, чтобы оно разгрузилось бесконечно, эффективно блокирует циклы Websockets?