前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Flask asyncio 异步处理请求

Flask asyncio 异步处理请求

原创
作者头像
小锋学长生活大爆炸
发布2022-08-19 21:43:19
1.1K0
发布2022-08-19 21:43:19
举报

来自:

​​​​​​Making Flask async and Quart sync (pgjones.dev)

示例:

代码语言:javascript
复制
from flask import Flask, jsonify, has_request_context, copy_current_request_context, requestfrom functools import wrapsfrom concurrent.futures import Future, ThreadPoolExecutorimport asyncio def run_async(func):    @wraps(func)    def _wrapper(*args, **kwargs):        call_result = Future()        def _run():            loop = asyncio.new_event_loop()            try:                result = loop.run_until_complete(func(*args, **kwargs))            except Exception as error:                call_result.set_exception(error)            else:                call_result.set_result(result)            finally:                loop.close()         loop_executor = ThreadPoolExecutor(max_workers=1)        if has_request_context():            _run = copy_current_request_context(_run)        loop_future = loop_executor.submit(_run)        loop_future.result()        return call_result.result()     return _wrapper   @app.route("/process/report/success/", methods=["POST"])@run_asyncasync def report_result_success():    account = request.json    print(request.json)    debug('>> 注册成功: ' + str(account))    write_csv(account, '成功.csv')    return Result.ok()

水话:

        像Flask这样的Web框架是异步编程技术的完美用例,因为它们的目的是处理独立的无状态请求。此外,Web框架通常由IO而不是CPU工作主导,这使得它们成为异步事件循环的明显用例。

        因此,Flask 通常与线程或事件循环一起使用。具体来说,非异步等待事件循环实现、eventlet、gevent 和 meinheld。异步解决方案之间的这种选择对 Flask 代码的影响非常小。

        Flask自成立以来一直处于同步状态,并且大量公司以这种方式成功地在生产中运行它。然而,Python已经在标准库中发展并正式化了一个基于异步等待的事件循环,即asyncio,社区又增加了两个Curio和Trio。这些基于异步等待的事件循环需要更改代码才能与事件循环交互

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档