flask_socket.io _ 运行异步任务的问题

问题描述

我的烧瓶项目中有这个配置:

在 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_asyncfunction:

async def my_asyncfunction(data):
   ....

这是我的错误

/usr/local/lib/python3.7/threading.py:870:运行时警告:协程 'my_asyncfunction' 从未等待过 self._target(*self._args,**self._kwargs)RuntimeWarning: 启用 tracemalloc 以获取对象分配回溯

所以我尝试了选项 async_mode="eventlet" 但同样的错误:(

解决方法

Flask、Flask-SocketIO 和 eventlet 都不支持 asyncio,你不能以这种方式混合常规和异步函数。

如果您的应用程序使用 asyncio 函数,那么您必须放弃 Flask、Flask-SocketIO 和 eventlet,转而使用支持 asyncio 的 python-socketio