flask_socket.io _ 运行异步任务的问题
Posted
技术标签:
【中文标题】flask_socket.io _ 运行异步任务的问题【英文标题】:flask_socket.io _ problem with running async tasks 【发布时间】:2021-03-29 23:50:58 【问题描述】:我的烧瓶项目有这个配置:
在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: RuntimeWarning: coroutine 'my_asyncfunction' 从未等待 self._target(*self._args, **self._kwargs)RuntimeWarning: Enable tracemalloc 获取对象分配回溯
所以我尝试了async_mode="eventlet"
选项但同样的错误:(
【问题讨论】:
【参考方案1】:Flask、Flask-SocketIO 和 eventlet 都不支持 asyncio,你不能以这种方式混合使用常规函数和异步函数。
如果您的应用程序使用 asyncio 函数,那么您必须放弃 Flask、Flask-SocketIO 和 eventlet,而使用支持 asyncio 的 python-socketio。
【讨论】:
tnx 回复。所以这里的场景是。我有用于 HTTP 请求的烧瓶和用于处理微型微服务工作者的 socket-io 烧瓶。哪些工作人员连接到我的后端。在工作人员和服务器之间建立连接后。 worker 发送机器 ID(mac 地址)以在云中注册(Kubernetes 中的 Pod)。因此必须等待此注册,并且需要向该工作人员发出响应。那么我应该如何处理这个问题呢? 有关如何将 Socket.IO 与 Flask 一起使用的示例,请参阅 Flask-SocketIO 文档。正如我在回答中所说,您不能在 Flask 应用程序中使用 asyncio。以上是关于flask_socket.io _ 运行异步任务的问题的主要内容,如果未能解决你的问题,请参考以下文章