美文网首页Python
[Flask] 异步非阻塞IO实现

[Flask] 异步非阻塞IO实现

作者: _小老虎_ | 来源:发表于2018-08-16 18:19 被阅读1070次

Flask默认是不支持非阻塞IO的,表现为:

请求1未完成之前,请求2是需要等待处理状态,效率非常低。
在flask中非阻塞实现可以由2种:
  • 启用flask多线程机制
# Flask
from flask import Flask, request, g
import os
import sys
reload(sys)
sys.setdefaultencoding('utf-8')
 
 
app = Flask(__name__)
app.config.update(DEBUG=True)
 
#获取本机电脑名
myname = socket.getfqdn(socket.gethostname(  ))
 
#获取本机ip
myaddr = socket.gethostbyname(myname)
myport = 8912
  
@app.route('/test1')
def the_test1():
    print "test1 print start"
    time.sleep(10)
    print "test1 print after sleep"
    return 'hello asyn'
 
@app.route('/test2')
def the_test2():
    print "test2 print!"
    return 'test2 return'
 
 
  
if __name__ == '__main__':
    app.run(host=myaddr,port=myport,debug=False,threaded=True) ### threaded开启以后 不需要等队列 threaded=True
    #或者
    #app.run(host=myaddr,port=myport,debug=False,processes=3) ### processes=N 进程数量,默认为1个
  • 启用monkey模块socket支持

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

from gevent.wsgi import WSGIServer
from yourapplication import app
http_server = WSGIServer(('', 5000), app)
http_server.serve_forever()

# Flask
from flask import Flask, request, g
import os
import sys
reload(sys)
sys.setdefaultencoding('utf-8')
 
# gevent
from gevent import monkey
from gevent.pywsgi import WSGIServer
monkey.patch_all()
# gevent end
 
app = Flask(__name__)
app.config.update(DEBUG=True)
 
#获取本机电脑名
myname = socket.getfqdn(socket.gethostname(  ))
 
#获取本机ip
myaddr = socket.gethostbyname(myname)
myport = 8912
 
 
@app.route('/test1')
def the_test1():
    print "test1 print start"
    time.sleep(10)
    print "test1 print after sleep"
    return 'hello asyn'
 
@app.route('/test2')
def the_test2():
    print "test2 print!"
    return 'test2 return'
 
 
 
 
if __name__ == '__main__':
    http_server = WSGIServer((myaddr, myport), app)
    http_server.serve_forever()

相关文章

  • Java IO快速入门

    网络IO实现方式分为BIO(阻塞IO)、线程池伪异步IO、NIO(非阻塞IO)、AIO(异步非阻塞IO); 异步、...

  • [Flask] 异步非阻塞IO实现

    Flask默认是不支持非阻塞IO的,表现为: 当 请求1未完成之前,请求2是需要等待处理状态,效率非常低。 在fl...

  • Java IO

    Before IO 分为:同步、异步阻塞、非阻塞 同步和异步是目的,阻塞和非阻塞是实现方式。 一个IO操作其实分成...

  • IO模型

    原文参考链接 四种状态 同步 异步 阻塞 非阻塞 IO分类 同步阻塞IO 同步非阻塞IO 异步非阻塞IO注意: 没...

  • 阻塞非阻塞 同步异步 IO模型及其应用 NIO实现原理

    1.同步异步概念 2.阻塞非阻塞概念 3.常见I/O模型:同步阻塞IO,同步非阻塞IO,异步阻塞IO,异步非阻塞I...

  • BIO NIO AIO

    BIO:同步阻塞IONIO:同步非阻塞IOAIO:异步非阻塞IO先弄清楚同步、异步,阻塞、非阻塞概念。 io操作分...

  • 深入浅出nodejs(异步I/O)

    异步IO实现现状 I/O的阻塞与非阻塞:IO对于操作系统内核而言,只有阻塞与非阻塞两种方式。阻塞模式的I/O会造成...

  • UNIX 的5种IO模型介绍

    IO模型同步、异步、阻塞、非阻塞socket阻塞与非阻塞,同步与异步 同步和异步 同步/异步主要针对C端-同步就像...

  • 并发编程基础知识三 异步,非阻塞和 IO 复用

    参考通俗讲解 异步,非阻塞和 IO 复用 一、异步,非阻塞 为了更加形象的说明同步异步、阻塞非阻塞,我们以小明去买...

  • I/O模型

    一般来说I/O模型可以分为:同步阻塞,同步非阻塞,异步阻塞,异步非阻塞IO 同步阻塞IO:在此种方式下,用户进程在...

网友评论

    本文标题:[Flask] 异步非阻塞IO实现

    本文链接:https://www.haomeiwen.com/subject/hqiobftx.html