Flask实现异步非阻塞:基于Gevent的完整方案

Luna
Luna
发布时间:2026-10-13 | 2人浏览过
原创

本文详细介绍如何在Flask中实现异步非阻塞处理,通过引入gevent库和WSGIServer替代默认服务器,解决长时间耗时任务阻塞其他请求的问题。文中提供了从环境安装到代码修改的完整步骤,并附带GitHub示例代码,帮助开发者避免常见误区,提升Web应用性能。

官方文档中其实已提供相关解决方案,只是位置较为隐蔽。加之网络上存在不少准确性存疑的指南,曾导致我走了不少弯路(当然也可能源于个人理解偏差)。为了帮助其他开发者减少试错成本,同时也作为个人的技术备忘,特此整理此方案。

完整示例代码托管于:https://github.com/wskssau/my_notespace 下的 python/todo_app 目录。

核心解决方案采用 Flask 结合 gevent 库。

首先需安装 gevent 依赖库。

pip install gevent

随后对原有代码进行相应修改,以适配异步处理机制。

# 文件头部
from gevent import monkey
from gevent.pywsgi import WSGIServer

# 在玩websockets,可以无视之哈,有空贴下flask websockets实现哈
from geventwebsocket.handler import WebSocketHandler

import time

# gevent的猴子魔法
monkey.patch_all()

app = Flask(__name__)

app.config.update(
 DEBUG=True
)

@app.route('/asyn/1/', methods=['GET'])
def test_asyn_one():
 if request.method == 'GET':
  time.sleep(10)
  return 'hello asyn'


@app.route('/test/', methods=['GET'])
def test():
 return 'hello test'


if __name__ == "__main__":
 # app.run()
 http_server = WSGIServer(('', 5000), app, handler_class=WebSocketHandler)
 http_server.serve_forever()

部署运行后,建议先访问 /asyn/1/ 接口,再访问 /test/ 接口。此时可以明显观察到,当 /asyn/1/ 正在执行耗时任务时,并不会阻塞对其他请求的处理。

以上内容即为本文的全部分享,希望能为各位的学习带来帮助,也欢迎大家继续支持本站。

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表