探索ASGI:Python的Web应用程序异步协议

LeapCell:Python Web 托管、异步任务和 Redis 的最佳无服务器平台

本文探讨 Python Web 应用中 ASGI 协议与 Uvicorn 服务器的关系。 初学者常疑惑为何 FastAPI 开发需要 Uvicorn,本文将解答此疑问。

Uvicorn 的作用

以下是一个简单的 HTTP 请求示例,使用 Uvicorn 运行:

import json

def convert_bytes_to_str(data):
    if isinstance(data, bytes):
        return data.decode('utf-8')
    if isinstance(data, tuple):
        return tuple(convert_bytes_to_str(item) for item in data)
    if isinstance(data, list):
        return [convert_bytes_to_str(item) for item in data]
    if isinstance(data, dict):
        return {key: convert_bytes_to_str(value) for key, value in data.items()}
    return data


async def app(scope, receive, send):
    data = convert_bytes_to_str(scope)
    print(json.dumps(data, indent=4))
    if scope['type'] == 'http':
        event = await receive()
        response_body = json.dumps({"message": "hello, ASGI!"}).encode('utf-8')
        await send({
            'type': 'http.response.start',
            'status': 200,
            'headers': [
                (b'content-type', b'application/json'),
            ],
        })
        await send({
            'type': 'http.response.body',
            'body': response_body,
        })

convert_bytes_to_str 函数用于处理范围字段中的二进制字符串。 代码接收请求,创建 JSON 响应,并分两步发送响应头和响应体,这是异步编程的典型模式,提高了效率和对不同协议的兼容性。

ASGI (异步服务器网关接口)

ASGI 是构建异步 Python Web 应用的协议,其主要特点包括:

  • 异步支持: 支持异步编程,提高并发处理能力。
  • 多协议支持: 支持 HTTP/HTTPS、WebSockets 等多种协议。
  • 并发支持: 能够同时处理多个请求。
  • 通信机制: 应用程序与服务器之间,以及应用程序不同部分之间通过消息交互。

ASGI 协议主要由应用程序接口和服务器接口构成,并依赖于事件循环接口来调度异步任务。 ASGI 事件驱动模型管理应用生命周期、HTTP 请求处理和 WebSocket 连接。

Uvicorn 和应用层框架

Uvicorn 实现 ASGI 服务器层,但其应用层不够友好。 因此,出现了更高层的框架,例如 Starlette 和 FastAPI。 Uvicorn 需要一个 ASGI 应用实例,这些框架提供了这样的实例。 使用 Uvicorn 启动应用:

uvicorn main:app --reload

总结

本文阐述了 Uvicorn 在 Python Web ASGI 协议中的作用。 ASGI 赋予 Python Web 应用异步、并发和多协议处理能力。

LeapCell:最佳无服务器平台

最后,推荐 LeapCell 作为部署 Python 项目的理想平台:

  • 多语言支持: 支持 JavaScript、Python、Go 和 Rust。
  • 免费部署无限项目: 仅按使用付费。
  • 高性价比: 极具成本效益。
  • 简化开发体验: 直观的 UI 和自动 CI/CD 管道。
  • 可伸缩性和高性能: 自动缩放,零操作开销。

了解更多信息,请访问 LeapCell 文档和 Twitter。

以上就是探索ASGI:Python的Web应用程序异步协议的详细内容,更多请关注昆居客【www.kunjuke.com】。

相关推荐:

SK 海力士拟探索新商业模式“内存即服务”:客户可租用芯片使用权

感谢网友 麻辣清补凉、不一样的体验、乌蝇哥的左手 的线索投递! 7 月 11 日消息,据彭博社今天(11 日)报道,SK 海力士正考虑调整存储芯片销售模式,探索包括“内存即服务”在内的新方案。按照这一设想,客户未来不一定要直接购买半导体,而是可以向 SK 海力士租用存储芯片使用权。SK 集团董事长崔泰源在接受彭博电视采访时说:“我们其实可以推出其他商业模式。我们可以成为存储器服务商,提供存储即服务...

探索“算力超市”和“算力银行”,中国信通院启动生态共建计划

感谢网友 風見暉一 的线索投递! 7 月 8 日消息,为落实工业和信息化部《关于开展普惠算力赋能中小企业发展专项行动的通知》有关要求,提升算力普惠易用水平,降低中小企业用算成本,中国信息通信研究院(简称“中国信通院”)联合算力产业发展方阵,今日宣布正式启动“算力超银生态共建计划”,依托中国算力平台,共同探索“算力超市”和“算力银行”两大创新服务形态。从通知获悉,该计划聚焦算力资源灵活供给与智能调度...

苹果:与博通签署超 300 亿美元协议,在美国生产超 150 亿颗芯片

感谢网友 软媒新友2199365、麻辣清补凉、华南吴彦祖 的线索投递! 7 月 8 日消息,苹果公司今日宣布与博通公司(Broadcom)达成一项新的多年期协议,双方将共同设计并生产用于苹果多款产品的定制芯片组件及前沿无线连接技术。官方表示,该协议预计总额将超过 300 亿美元(注:现汇率约合 2040.56 亿元人民币),将推动生产超过 150 亿颗美国制造芯片,并在美国创造数百个工作岗位。新的...

Nothing Ear(3a)耳机外观谍照及规格曝光:12mm 动圈、支持 LDAC 协议,99 欧元

7 月 6 日消息,Nothing Phone(4b)手机和 Nothing Ear(3a)耳机将于北京时间 7 月 7 日(明天)18:00 发布,目前外媒 Winfuture 已曝光其中 Nothing Ear(3a)耳机外观图和部分规格信息。该产品提供黄 / 白 / 粉 / 黑四种配色可选,耳机延续家族式设计,充电盒盖使用透明设计,耳机柄使用半透明设计,支持触控操作。耳机搭载 12mm 动圈...

美光科技与通用汽车签署协议,确保长期内存与存储供应

7 月 1 日消息,美光科技与通用汽车于当地时间周三联合宣布,双方已签署车载内存及存储平台供货协议,相关产品将用于整车生产制造。汽车整车平台与量产生产周期漫长,零部件供货需保持稳定,因此内存供应的可预见性与持续性是行业核心要务。当前全球半导体需求持续走高,稳定获取内存与存储芯片,不仅对车企至关重要,也能保障消费者买到搭载最新技术、符合高安全标准的新款车型。注意到,除协议约定的保障供货量外,美光与通...

DNF探索遗忘之地活动攻略

DNF破浪者和女蓝拳快上线了,同时上线的还有大量的周年庆福利活动,比如探索遗忘之地活动,那么DNF探索遗忘之地活动怎么玩?下面就给大家带来DNF探索遗忘之地活动攻略。 DNF探索遗忘之地活动攻略 仅限胶囊角色进入,每个角色入场次数独立 其实就是以前遗忘之地玩法复用,不同区域掉落的装备不一样,彩色晶石则有每周获取限制 装备则会存入保管库内,每周可领取最多1太初+7史诗件装备 晶石则可兑换道具 本文内...

《伊莫》深海秘境探索玩法介绍

伊莫深海秘境探索怎么玩?神秘海域作为当前热门的探索区域,已经迎来全新的宠物更新。这一次就为大家报了两只已经开放的宠物刷新点位。那错过的话确实比较吃亏,想要迅速的提升战斗力,刷齐所有的稀有宠物,那千万不要错过,赶紧跟着一起来了解一下。下面就为大家来详细的分析一下,当大家在看完之后就能明白。 《伊莫》深海秘境探索玩法介绍 第一个就是珊瑚鱼,这就是土系回能宠物。从实战的测试来看,珊瑚鱼的定位就会偏向于辅...

云顶之弈s15恭喜发财机甲协议阵容推荐

云顶之弈S17版本星神主题,就在最近云顶之弈也做了不少调整,对羁绊,英雄,强化符文等都有调整,S15恭喜发财模式也返场了,那么下面就给大家带来s15恭喜发财机甲协议阵容推荐。 云顶之弈s15恭喜发财机甲协议阵容推荐 神器/光装:卡尔玛(魔蕴,光蓝) 果实:卡尔玛(魔术师/高效率/锐利之眼)可选永恩(不可屈服/血色面纱)可选外援(婕拉/李青/卡牌谁2星给谁果)可选剑魔+赛娜(驾驶员) 脚开3协议:云...