uwsgi разблокировка websockets-потока и выгрузка - PullRequest
0 голосов
/ 05 сентября 2018

Я пишу приложение фляги 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?

...