V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
black11black
V2EX  ›  问与答

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

  •  
  •   black11black · 2020-02-10 22:16:36 +08:00 · 1549 次点击
    这是一个创建于 1535 天前的主题,其中的信息可能已经有所发展或是发生改变。

    新项目里 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 条回复    2020-02-12 07:08:50 +08:00
    rookiebulls
        1
    rookiebulls  
       2020-02-10 22:35:00 +08:00 via iPhone
    可以看看 gevent
    creedowl
        2
    creedowl  
       2020-02-11 00:23:35 +08:00 via Android
    要不试试 golang
    kidlj
        3
    kidlj  
       2020-02-11 01:21:17 +08:00 via iPhone
    golang, 每个 request 一个 goroutine。
    gabon
        4
    gabon  
       2020-02-11 07:44:44 +08:00 via Android
    线程池
    2wex
        5
    2wex  
       2020-02-11 08:43:32 +08:00
    用线程池

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

    我服务预计部署在 win 平台上是需求决定的,不支持 gunicorn
    black11black
        7
    black11black  
    OP
       2020-02-12 07:08:50 +08:00
    @rookiebulls

    我接触 py 的异步技术比较晚,基本是 py3.6 以后的事,在我看来要不然就多线程,要协程的话就用正统封装开发(或者一些定制封装 curio 之类的),我不能接受 gevent 这种神秘而不可控的东西。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   3658 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 05:02 · PVG 13:02 · LAX 22:02 · JFK 01:02
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.