HullQin分享后端优化经验:探索uvloop与Python asyncio的深度应用

我是HullQin,公众号线下派对游戏作者(欢迎关注公众号,发送加微信,交友)。转发本文需获得作者HullQin授权。我独立开发了“在线桌游合集”,这是一个可以轻松与朋友在线玩斗地主、五子棋等游戏的网页,免费,无广告。 《Dice Crush》也是为了参加Game Jam 2022而开发的,如果喜欢的话可以在HullQin上关注我哦~有时间我会分享游戏相关的技术。

HullQin分享后端优化经验:探索uvloop与Python asyncio的深度应用

背景

最近在思考后端优化,了解了uvloop,它是python原生asyncio事件循环的替代品。

首先介绍一下asyncio

从Python 3.4开始,引入了asyncio库,参考PEP-3156。 Python从3.5开始引入了async和await语法,参考PEP-0492。

Python中的用法其实和JavaScript中的async和await类似。毕竟脚本语言的规范基本上都是一遍又一遍地复制,并且愿意融入邻近语言的优秀语法。这对于开发人员来说也很棒,可以更轻松地学习另一种语言。

Python 3.4和3.5推动了一场革命。从那时起,Python异步编程变得越来越流行(基于协程)。

可能你不太了解协程,我简单介绍一下:

以前,当我们使用Python编写爬虫时,我们可能会使用requests库requests.get(url)来发送请求,并等到有结果才继续代码。这是一个顺序且同步的执行。当请求发生时,你只能等待,不能让代码做别的事情。除非你打开一个新线程去做另一件事。

但现在,我们有了异步编程。基于内置的事件循环,我们可以实现如下效果:当遇到I/O操作(比如HTTP请求)时,我们先暂停这段代码(这个任务)的执行,然后看看是否有其他可以执行的任务。如果还有其他任务需要执行,则执行其他任务。如果所有任务都无法执行,则等待一个任务可以执行,然后执行该任务,直到运行完毕或遇到 I/O 操作,然后暂停并执行其他任务。

请注意,Python 中的异步编程基于事件循环。今天我们要讨论的是事件循环。

关于uvloop

uvloop 是 Python 原生事件循环的替代品。提高性能。

为什么性能会提高

(声明来自uvloop官方博客)

uvloop基于Cython编写,执行效率更高。 uvloop底层基于libuv,libuv是一个高性能、跨平台的异步IO库。 Nodejs的事件循环也是基于libuv的。基准测试

这不是我做的,我只是转发uvloop官方的测试结果。

分为TCP协议和HTTP协议两种测试。

传输控制协议

这是使用简单的 echo 服务进行的测试,并不能代表所有生产环境中的情况。

分别使用1KiB、10KiB和100KiB数据包进行测试。

可见uvloop确实牛逼,性能几乎和Go一样好。

你可能想看:
« 上一篇
下一篇 »

相关推荐

python爬虫教程PDF,Python爬虫书PDF

2026年09月02日

33阅读

外国教程python,python编程教学视频

2026年09月02日

27阅读

python简明教程沈洁元,python详细基础教程

2026年09月02日

21阅读

python库包教程,python 包

2026年09月02日

27阅读

python教程大全集,python教程600集

2026年09月02日

27阅读

python入门教程完整版,python零基础入门全套教程视频

2026年09月02日

23阅读