flask_socket.io _ проблема с выполнением асинхронных задач

#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.