请问为什么我的 flask 异步不了,它不回调啊,调了好久 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
zzping
V2EX    Python

请问为什么我的 flask 异步不了,它不回调啊,调了好久

  •  
  •   zzping 2021-01-15 10:41:10 +08:00 4242 次点击
    这是一个创建于 1797 天前的主题,其中的信息可能已经有所发展或是发生改变。
    from flask import Flask,request
    import get
    from wsgiref.simple_server import make_server
    from concurrent.futures import ThreadPoolExecutor
    app = Flask(__name__)
    executor = ThreadPoolExecutor(2)
    @app.route('/wx', methods=["GET", "POST"])
    def getinput():
    if (1):
    executor.submit(get.yiqing.main()) # 异步内容
    return "success" #不 return 啊 被上面那个异步阻塞了
    if __name__ == '__main__':
    server = make_server('', 8099, app)
    server.serve_forever()
    20 条回复    2021-01-16 18:13:12 +08:00
    xiaolinjia
        1
    xiaolinjia  
       2021-01-15 11:05:55 +08:00
    不知道你想干嘛,本身 flask 就是一个请求开一个线程去处理的,你自己内部又整一个线程池去处理干嘛
    zzping
        2
    zzping  
    OP
       2021-01-15 11:16:15 +08:00
    @xiaolinjia 你好,就是用户请求后,我返回一张二维码,然后我要检测用户是否扫描成功二维码。但是我要先返回给他二维码才能检测,我就想着再开个线程池去检测
    sudoy
        3
    sudoy  
       2021-01-15 11:38:55 +08:00   1
    试试 asyncio 看,下次在代码前后加 ``` 别人看起来也舒服点啊,开帖子的时候支持 markdown 的
    xiaolinjia
        4
    xiaolinjia  
       2021-01-15 11:41:54 +08:00   1
    @zzping submit 参数里的 func,不带括号。他 submit 内部会 call 他。
    yeqizhang
        5
    yeqizhang  
       2021-01-15 11:43:48 +08:00
    感觉你得重新理一下你的代码逻辑流程.. http 请求这样玩不合理...
    zzping
        6
    zzping  
    OP
       2021-01-15 11:53:22 +08:00
    @yeqizhang 好,谢谢
    zzping
        7
    zzping  
    OP
       2021-01-15 11:54:03 +08:00
    @xiaolinjia 汗,我弄掉
    zzping
        8
    zzping  
    OP
       2021-01-15 11:54:36 +08:00
    @sudoy 好,新人不太发帖,嘻嘻嘻,谢谢哈
    jswh
        9
    jswh  
       2021-01-15 11:59:55 +08:00
    executor.submit(get.yiqing.main()),这里错了吧,你直接调用函数,而不是去线程李调用
    smartwusir007
        10
    smartwusir007  
       2021-01-15 12:01:47 +08:00
    ```python
    from flask import Flask,request
    import get
    from wsgiref.simple_server import make_server
    from concurrent.futures import ThreadPoolExecutor


    app = Flask(__name__)
    executor = ThreadPoolExecutor(2)


    @app.route('/wx', methods=["GET", "POST"])
    def getinput():
    if (1):
    executor.submit(get.yiqing.main()) # 异步内容
    return "success" #不 return 啊 被上面那个异步阻塞了


    if __name__ == '__main__':
    server = make_server('', 8099, app)
    server.serve_forever()
    ```
    着好别扭啊,我给格式化了一下,是这样吧
    smartwusir007
        11
    smartwusir007  
       2021-01-15 12:02:19 +08:00
    @smartwusir007 咦,怎么不行
    zzping
        12
    zzping  
    OP
       2021-01-15 12:06:57 +08:00
    from flask import Flask,request
    from wsgiref.simple_server import make_server
    from concurrent.futures import ThreadPoolExecutor
    import time

    app = Flask(__name__)
    executor = ThreadPoolExecutor(2)

    def ceshi():
    time.sleep(1000)

    @app.route('/wx', methods=["GET", "POST"])
    def getinput():
    if (1):
    executor.submit(ceshi)
    return "success"
    if __name__ == '__main__':
    server = make_server('', 8099, app)
    server.serve_forever()
    怎么试都不行 都要等 time.sleep()后才会 return
    scukmh
        13
    scukmh  
       2021-01-15 13:58:12 +08:00
    @smartwusir007 开帖子支持 markdown,回复不支持。
    arthurblake
        14
    arthurblake  
       2021-01-15 14:36:01 +08:00
    @zzping 你的环境有问题吧,我测试这个,马上返回
    treblex
        15
    treblex  
       2021-01-15 17:42:51 +08:00
    /qrCodeLogin //生成二维码给用户扫描
    /login //二维码地址,扫码打开之后 更新状态为已扫描待处理
    /xxxx //扫码的页面 点击按钮请求业务接口,更改状态为 扫码成功


    或者就是用 websocket 实时更新状态

    参考微信的那些东西 我是这么理解的,还没具体做过这种业务
    zzping
        16
    zzping  
    OP
       2021-01-15 19:30:40 +08:00
    @yph007595 我 window 和 linxu 都是一样的结果可能是我的问题 不过我找到办法了
    try:return "success"
    finally:time.sleep(1000)
    zzping
        17
    zzping  
    OP
       2021-01-15 19:31:25 +08:00
    @treblex 嗯大概是这样 谢谢
    tg3253
        18
    tg3253  
       2021-01-15 21:18:56 +08:00
    试试 gunicon eventlet 启动,多开几个线程
    neoblackcap
        19
    neoblackcap  
       2021-01-16 01:30:30 +08:00   1
    人家二维码扫码不是这样做的,你开三个接口去做吧。
    1. 接口返回二维码
    2. 提供一个轮训接口,然后前端轮训对应的接口就知道有没有扫描了,扫描之后结果怎么样
    3. 回调接口,接收回调的请求
    这样一整套下来,你就回到最基本的用 flask 写接口的流程上面。看你的问题,你根本就不了解 wsgi 跟 asyncio 那套东西的运行机制,及早回头吧
    zzping
        20
    zzping  
    OP
       2021-01-16 18:13:12 +08:00
    @neoblackcap 嗯谢谢,我还是得多研究研究
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     5228 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 34ms UTC 08:31 PVG 16:31 LAX 00:31 JFK 03:31
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86