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

 更新时间:2018年02月10日 08:32:00   作者:阏男秀  
这篇文章主要介绍了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

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

相关文章

  • jasypt 集成SpringBoot 数据库密码加密操作

    jasypt 集成SpringBoot 数据库密码加密操作

    这篇文章主要介绍了jasypt 集成SpringBoot 数据库密码加密操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-11-11
  • Java使用ffmpeg和mencoder实现视频转码

    Java使用ffmpeg和mencoder实现视频转码

    这篇文章主要为大家详细介绍了Java使用ffmpeg和mencoder实现视频转码,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-12-12
  • springboot中自定义异常以及定制异常界面实现过程解析

    springboot中自定义异常以及定制异常界面实现过程解析

    这篇文章主要介绍了springboot中自定义异常以及定制异常界面实现过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-09-09
  • spring动态控制定时任务的实现

    spring动态控制定时任务的实现

    在实际项目中,经常需要动态的控制定时任务,比如通过接口增加、启动、停止、删除定时任务,本文主要介绍了spring动态控制定时任务的实现,感兴趣的可以了解一下
    2024-01-01
  • nodejs连接dubbo服务的java工程实现示例

    nodejs连接dubbo服务的java工程实现示例

    这篇文章主要介绍了在项目迁移中,nodejs连接dubbo服务的java工程实现示例,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步
    2022-03-03
  • Gradle环境下导出Swagger为PDF的步骤详解

    Gradle环境下导出Swagger为PDF的步骤详解

    这篇文章主要介绍了Gradle环境下导出Swagger为PDF的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2019-06-06
  • SpringBoot自动配置实现流程详细分析

    SpringBoot自动配置实现流程详细分析

    这篇文章主要介绍了SpringBoot自动配置原理分析,SpringBoot是我们经常使用的框架,那么你能不能针对SpringBoot实现自动配置做一个详细的介绍。如果可以的话,能不能画一下实现自动配置的流程图。牵扯到哪些关键类,以及哪些关键点
    2022-12-12
  • Java实现搜索功能代码详解

    Java实现搜索功能代码详解

    这篇文章主要介绍了Java实现搜索功能代码详解,实现思路小编给大家介绍的非常详细,需要的朋友可以参考下
    2017-12-12
  • 基于Springboot+Mybatis对数据访问层进行单元测试的方式分享

    基于Springboot+Mybatis对数据访问层进行单元测试的方式分享

    本文将介绍一种快高效、可复用的解决测试方案——对数据访问层做单元测试,文章通过代码示例介绍的非常详细,具有一定的参考价值,需要的朋友可以参考下
    2023-07-07
  • 解决spring集成redisson踩过的坑

    解决spring集成redisson踩过的坑

    这篇文章主要介绍了spring集成redisson踩过的坑,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-09-09

最新评论