black11black
V2EX  ›  问与答

windwos 平台, flask 如何实现每一次 request 新开一个线程处理?

  •  
  •   black11black · Feb 10, 2020 · 2055 views
    This topic created in 2297 days ago, the information mentioned may be changed or developed.

    新项目里 ui 要和后端频繁交互,确保线程上无阻塞各方面都会很方便。

    网络服务方案就两种,要不然就 flask,要不然就 aiohttp, 以前用 asyncio 从传输层开始折腾过 rpc 框架,协程确实开发起来感觉考虑的问题很多。 我这个项目又没那么高性能需求,所以就选了开发快的 flask。

    今天调研遇到一个问题,windows 平台没有 gunicorn,而 flask 自带的 server 设置到 threaded 模式后发现只实现了 router 之间无阻塞。

    代码:

    from flask import Flask
    import time
    app = Flask(__name__)
    
    @app.route('/1')
    def index():
        return 'route 1 no block'
    
    @app.route('/2')
    def index2():
        time.sleep(10)
        return 'route 2 block 10s'
    
    if __name__ == '__main__':
        app.run(debug=True,threaded=True)
    

    开启 threaded 后,行为表现是: 访问 /2,同时打开 /1,无阻塞。 访问 /2,同时再开一个 /2,第二个页面代码,会阻塞到第一个页面返回后才开始执行。

    这个不符合我的需求,我希望每一次新的 request 都新开辟线程。 有什么办法实现吗?还是我哪里设置错了 谢谢大家

    7 replies    2020-02-12 07:08:50 +08:00
    rookiebulls
        1
    rookiebulls  
       Feb 10, 2020 via iPhone
    可以看看 gevent
    creedowl
        2
    creedowl  
       Feb 11, 2020 via Android
    要不试试 golang
    kidlj
        3
    kidlj  
       Feb 11, 2020 via iPhone
    golang, 每个 request 一个 goroutine。
    gabon
        4
    gabon  
       Feb 11, 2020 via Android
    线程池
    2wex
        5
    2wex  
       Feb 11, 2020
    用线程池

    而且最好不要用 app.run ,这只是测试用的,可以用 gunicorn、WGSI 等
    black11black
        6
    black11black  
    OP
       Feb 12, 2020
    @2wex
    谢谢回复,请问线程池配合 flask 怎么设置?

    我服务预计部署在 win 平台上是需求决定的,不支持 gunicorn
    black11black
        7
    black11black  
    OP
       Feb 12, 2020
    @rookiebulls

    我接触 py 的异步技术比较晚,基本是 py3.6 以后的事,在我看来要不然就多线程,要协程的话就用正统封装开发(或者一些定制封装 curio 之类的),我不能接受 gevent 这种神秘而不可控的东西。
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   3090 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 45ms · UTC 13:53 · PVG 21:53 · LAX 06:53 · JFK 09:53
    ♥ Do have faith in what you're doing.