• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

Flask实现异步非阻塞请求功能实例解析

java 搞代码 4年前 (2022-01-05) 32次浏览 已收录 0个评论
文章目录[隐藏]

这篇文章主要介绍了Flask实现异步非阻塞请求功能实例解析,分享了相关代码示例,小编觉得还是挺不错的,具有一定借鉴价值,需要的朋友可以参考下

本文研究的主要是Flask实现异步非阻塞请求功能,具体实现如下。

最近做物联网项目的时候需要搭建一个异步非阻塞的HTTP服务器,经过查找资料,发现可以使用gevent包。

关于gevent

Gevent 是一个 Python 并发网络库,它使用了基于 libevent 事件循环的 greenlet 来提供一个高级同步 API。下面是代码示例:

 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 #<strong style="color:transparent">来源gaodai#ma#com搞@代~码网</strong> 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的官网有详细的解释,这里简单说明一下:

monkey carefully replace functions and classes in the standard socket module with their cooperative counterparts. That way even the modules that are unaware of gevent can benefit from running in a multi-greenlet environment.

翻译:猴子补丁仔细的用并行代码副本替换标准socket模块的函数和类,这种方式可以使模块在不知情的情况下让gevent更好的运行于multi-greenlet环境中。

测试

打开浏览器,首先请求http://127.0.0.1:5000/asyn/,然后
再请求http://127.0.0.1:5000/test/这个接口十次。如果是一般的Flask框架,后面的接口是没有响应的。

打印内容如下:

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

总结

以上就是本文关于Flask实现异步非阻塞请求功能实例解析的全部内容,希望对大家有所帮助。感兴趣的朋友可以继续参阅本站其他相关专题,如有不足之处,欢迎留言指出。感谢朋友们对本站的支持!

以上就是Flask实现异步非阻塞请求功能实例解析的详细内容,更多请关注gaodaima搞代码网其它相关文章!


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:Flask实现异步非阻塞请求功能实例解析

喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址