#python #flask-socketio #eventlet
#python #flask-socketio #eventlet
Вопрос:
У меня есть эта конфигурация в моем проекте flask :
в requrement.txt:
flask_socketio
eventlet
в моем app.py :
from flask_socketio import SocketIO
socketio = SocketIO(app, async_mode="eventlet")
@socketio.on('register')
async def register(data):
await my_asyncfunction(data['machine_id'])
и my_asyncфункция:
async def my_asyncfunction(data):
....
и это моя ошибка:
/usr/local/lib/python3.7/threading.py:870: Предупреждение о времени выполнения: сопрограмма ‘my_asyncfunction’ никогда не ожидалась self._target(*self._args, **self._kwargs) Предупреждение о времени выполнения: включить tracemalloc для получения обратной трассировки выделения объекта
итак, я попробовал этот вариант async_mode="eventlet"
, но с той же ошибкой: (
Ответ №1:
Ни Flask, ни Flask-SocketIO, ни eventlet не поддерживают asyncio, вы не можете смешивать обычные и асинхронные функции таким образом.
Если ваше приложение использует функции asyncio, то вам придется отказаться от Flask, Flask-SocketIO и eventlet и вместо этого использовать python-socketio, который поддерживает asyncio.
Комментарии:
1. tnx для ответа. итак, сценарий здесь таков. У меня есть flask для HTTP-запроса и flask ввода-вывода сокета для обработки крошечных микросервисных работников. какие работники подключаются к моему бэкэнду. после установления соединения между рабочим и сервером. рабочий отправляет идентификатор компьютера (mac-адрес) для регистрации в облаке (pods в Kubernetes). таким образом, эта регистрация должна быть ожидаемой, и ответ должен быть отправлен этому работнику. итак, как мне справиться с этими проблемами?
2. Примеры использования сокета см. В документации Flask-SocketIO. Ввод-вывод с помощью Flask. Как я уже сказал в своем ответе, вы не можете использовать asyncio в приложении Flask.