1 | pip install gevent |
关于gevent
Gevent 是一个 Python 并发网络库,它使用了基于 libevent 事件循环的 greenlet 来提供一个高级同步 API。下面是代码示例:
1 2 3 4 5 | from gevent.wsgi import WSGIServer from yourapplication import app http_server = WSGIServer(('', 5000 ), app) http_server.serve_forever() |
代码清单
下面放上Flask异步非阻塞的代码清单,以后需要用到的时候直接移植即可。
# coding=utf-8 # Python Version: 3.5.1 # Flask from flask import Flask, request, g # gevent from gevent import monkey from gevent.pywsgi import WSGIServer monkey.patch_all() # gevent end import time app = Flask(__name__) app.config.update(DEBUG=True) @app.route('/asyn/', methods=['GET']) def test_asyn_one(): print("asyn has a request!") 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) http_server.serve_forever()
关于monkey.patch_all()
为什么要加monkey.patch_all()
这一条语句呢?在gevnet的官网有详细的解释,这里简单说明一下:
猴子补丁仔细的用并行代码副本替换标准socket模块的函数和类,这种方式可以使模块在不知情的情况下让gevent更好的运行于multi-greenlet环境中。
测试
打开浏览器,首先请求http://127.0.0.1:5000/asyn/
,然后
再请求http://127.0.0.1:5000/test/
这个接口十次。如果是一般的Flask框架,后面的接口是没有响应的。
打印内容如下:
1 2 3 4 5 6 7 8 9 10 11 12 | asyn has a request! 127.0 . 0.1 - - [ 2016 - 10 - 24 20 : 45 : 10 ] "GET /test/ HTTP/1.1" 200 126 0.000000 127.0 . 0.1 - - [ 2016 - 10 - 24 20 : 45 : 11 ] "GET /test/ HTTP/1.1" 200 126 0.000000 127.0 . 0.1 - - [ 2016 - 10 - 24 20 : 45 : 11 ] "GET /test/ HTTP/1.1" 200 126 0.000000 127.0 . 0.1 - - [ 2016 - 10 - 24 20 : 45 : 12 ] "GET /test/ HTTP/1.1" 200 126 0.000000 127.0 . 0.1 - - [ 2016 - 10 - 24 20 : 45 : 12 ] "GET /test/ HTTP/1.1" 200 126 0.000998 127.0 . 0.1 - - [ 2016 - 10 - 24 20 : 45 : 13 ] "GET /test/ HTTP/1.1" 200 126 0.001001 127.0 . 0.1 - - [ 2016 - 10 - 24 20 : 45 : 14 ] "GET /test/ HTTP/1.1" 200 126 0.000000 127.0 . 0.1 - - [ 2016 - 10 - 24 20 : 45 : 14 ] "GET /test/ HTTP/1.1" 200 126 0.001014 127.0 . 0.1 - - [ 2016 - 10 - 24 20 : 45 : 15 ] "GET /test/ HTTP/1.1" 200 126 0.001000 127.0 . 0.1 - - [ 2016 - 10 - 24 20 : 45 : 15 ] "GET /test/ HTTP/1.1" 200 126 0.000000 127.0 . 0.1 - - [ 2016 - 10 - 24 20 : 45 : 18 ] "GET /asyn/ HTTP/1.1" 200 126 10.000392 |
本文来自博客园,作者:孙龙-程序员,转载请注明原文链接:https://www.cnblogs.com/sunlong88/p/9623851.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· DeepSeek在M芯片Mac上本地化部署
· 葡萄城 AI 搜索升级:DeepSeek 加持,客户体验更智能