跳至主要內容
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?

4563博客

全新的繁體中文 WordPress 網站
  • 首頁
  • 请问为什么我的 flask 异步不了,它不回调啊,调了好久
未分類
4 2 月 2021

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

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

資深大佬 : zzping 10

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)

  • 資深大佬 : xiaolinjia

    不知道你想干嘛,本身 flask 就是一个请求开一个线程去处理的,你自己内部又整一个线程池去处理干嘛

  • 主 資深大佬 : zzping

    @xiaolinjia 你好,就是用户请求后,我返回一张二维码,然后我要检测用户是否扫描成功二维码。但是我要先返回给他二维码才能检测,我就想着再开个线程池去检测

  • 資深大佬 : sudoy

    试试 asyncio 看,下次在代码前后加 “` 别人看起来也舒服点啊,开帖子的时候支持 markdown 的

  • 資深大佬 : xiaolinjia

    @zzping submit 参数里的 func,不带括号。他 submit 内部会 call 他。

  • 資深大佬 : yeqizhang

    感觉你得重新理一下你的代码逻辑流程.. http 请求这样玩不合理…

  • 主 資深大佬 : zzping

    @yeqizhang 好,谢谢

  • 主 資深大佬 : zzping

    @xiaolinjia 汗,我弄掉

  • 主 資深大佬 : zzping

    @sudoy 好,新人不太发帖,嘻嘻嘻,谢谢哈

  • 資深大佬 : jswh

    executor.submit(get.yiqing.main()),这里错了吧,你直接调用函数,而不是去线程李调用

  • 資深大佬 : smartwusir007

    “`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

    @smartwusir007 咦,怎么不行

  • 主 資深大佬 : zzping

    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

    @smartwusir007 开帖子支持 markdown,回复不支持。

  • 資深大佬 : yph007595

    @zzping 你的环境有问题吧,我测试这个,马上返回

  • 資深大佬 : treblex

    /qrCodeLogin //生成二维码给用户扫描
    /login //二维码地址,扫码打开之后 更新状态为已扫描待处理
    /xxxx //扫码的页面 点击按钮请求业务接口,更改状态为 扫码成功

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

    参考微信的那些东西 我是这么理解的,还没具体做过这种业务

  • 主 資深大佬 : zzping

    @yph007595 我 window 和 linxu 都是一样的结果可能是我的问题 不过我找到办法了
    try:return “success”
    finally:time.sleep(1000)

  • 主 資深大佬 : zzping

    @treblex 嗯大概是这样 谢谢

  • 資深大佬 : tg3253

    试试 gunicon eventlet 启动,多开几个线程

  • 資深大佬 : neoblackcap

    人家二维码扫码不是这样做的,你开三个接口去做吧。
    1. 接口返回二维码
    2. 提供一个轮训接口,然后前端轮训对应的接口就知道有没有扫描了,扫描之后结果怎么样
    3. 回调接口,接收回调的请求
    这样一整套下来,你就回到最基本的用 flask 写接口的流程上面。看你的问题,你根本就不了解 wsgi 跟 asyncio 那套东西的运行机制,及早回头吧

  • 主 資深大佬 : zzping

    @neoblackcap 嗯谢谢,我还是得多研究研究

文章導覽

上一篇文章
下一篇文章

AD

其他操作

  • 登入
  • 訂閱網站內容的資訊提供
  • 訂閱留言的資訊提供
  • WordPress.org 台灣繁體中文

51la

4563博客

全新的繁體中文 WordPress 網站
返回頂端
本站採用 WordPress 建置 | 佈景主題採用 GretaThemes 所設計的 Memory
4563博客
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?
在這裡新增小工具