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 · 46 天前 · 1990 次点击
    这是一个创建于 46 天前的主题,其中的信息可能已经有所发展或是发生改变。
    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   46 天前
    不知道你想干嘛,本身 flask 就是一个请求开一个线程去处理的,你自己内部又整一个线程池去处理干嘛
    zzping
        2
    zzping   46 天前
    @xiaolinjia 你好,就是用户请求后,我返回一张二维码,然后我要检测用户是否扫描成功二维码。但是我要先返回给他二维码才能检测,我就想着再开个线程池去检测
    sudoy
        3
    sudoy   46 天前   ❤️ 1
    试试 asyncio 看,下次在代码前后加 ``` 别人看起来也舒服点啊,开帖子的时候支持 markdown 的
    xiaolinjia
        4
    xiaolinjia   46 天前   ❤️ 1
    @zzping submit 参数里的 func,不带括号。他 submit 内部会 call 他。
    yeqizhang
        5
    yeqizhang   46 天前
    感觉你得重新理一下你的代码逻辑流程.. http 请求这样玩不合理...
    zzping
        6
    zzping   46 天前
    @yeqizhang 好,谢谢
    zzping
        7
    zzping   46 天前
    @xiaolinjia 汗,我弄掉
    zzping
        8
    zzping   46 天前
    @sudoy 好,新人不太发帖,嘻嘻嘻,谢谢哈
    jswh
        9
    jswh   46 天前
    executor.submit(get.yiqing.main()),这里错了吧,你直接调用函数,而不是去线程李调用
    smartwusir007
        10
    smartwusir007   46 天前
    ```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   46 天前
    @smartwusir007 咦,怎么不行
    zzping
        12
    zzping   46 天前
    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   46 天前
    @smartwusir007 开帖子支持 markdown,回复不支持。
    yph007595
        14
    yph007595   46 天前
    @zzping 你的环境有问题吧,我测试这个,马上返回
    treblex
        15
    treblex   46 天前
    /qrCodeLogin //生成二维码给用户扫描
    /login //二维码地址,扫码打开之后 更新状态为已扫描待处理
    /xxxx //扫码的页面 点击按钮请求业务接口,更改状态为 扫码成功


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

    参考微信的那些东西 我是这么理解的,还没具体做过这种业务
    zzping
        16
    zzping   46 天前
    @yph007595 我 window 和 linxu 都是一样的结果可能是我的问题 不过我找到办法了
    try:return "success"
    finally:time.sleep(1000)
    zzping
        17
    zzping   46 天前
    @treblex 嗯大概是这样 谢谢
    tg3253
        18
    tg3253   46 天前
    试试 gunicon eventlet 启动,多开几个线程
    neoblackcap
        19
    neoblackcap   45 天前   ❤️ 1
    人家二维码扫码不是这样做的,你开三个接口去做吧。
    1. 接口返回二维码
    2. 提供一个轮训接口,然后前端轮训对应的接口就知道有没有扫描了,扫描之后结果怎么样
    3. 回调接口,接收回调的请求
    这样一整套下来,你就回到最基本的用 flask 写接口的流程上面。看你的问题,你根本就不了解 wsgi 跟 asyncio 那套东西的运行机制,及早回头吧
    zzping
        20
    zzping   45 天前
    @neoblackcap 嗯谢谢,我还是得多研究研究
    关于   ·   帮助文档   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   3156 人在线   最高记录 5497   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 40ms · UTC 13:43 · PVG 21:43 · LAX 05:43 · JFK 08:43
    ♥ Do have faith in what you're doing.