前言:python由于GIL(全局锁)的存在,不能发挥多核的优势,其性能一直饱受诟病。然而在IO密集型的网络编程里,异步处理比同步处理能提升成百上千倍的效率,弥补了python性能方面的短板,如最新的微服务框架japr...
要讲清楚协程的原理非常难,我也只是了解一点皮毛,不过我还是很想把这些皮毛跟大家分享一下,首先跟大家说一下多进程、多线程和协程的原理。
进程是系统分配资源的最小单位,多进程耗费系统...
4.uvloop
是asyncio的事件循环的替代方案。事件循环 > 默认asyncio的事件循环。
[code lang="python"]
pip3 install uvloop
[/code]
[code lang="python"]
import asyncio
import uvloop
asyncio.s...
3.8 异步上下文管理器
此种对象通过定义 __aenter__() 和 __aexit__()方法来对async with语句中的环境进行控制。由PEP 492引入。
[code lang="python"]
import asyncio
class AsyncContextManager:
...
在 Python 开发中,我们经常会使用到 with 语法块,例如在读写文件时,保证文件描述符的正确关闭,避免资源泄露问题。
你有没有思考过, with 背后是如何实现的?我们常常听到的上下文管理器究竟是什么?
...
3.7 异步迭代器
**什么是异步迭代器**
实现了 [`__aiter__()`](https://docs.python.org/zh-cn/3.8/reference/datamodel.html#object.__aiter__) 和 [`__anext__()`](https://docs.python.org/zh-cn/3.8/re...
3.5 asyncio.Future对象
A `Future`is a special **low-level** awaitable object that represents an **eventual result** of an asynchronous operation.
Task继承Future,Task对象内部await结果的处理...
迭代器
迭代是Python最强大的功能之一,是访问集合元素的一种方式。
迭代器是一个可以记住遍历的位置的对象。
迭代器对象从集合的第一个元素开始访问,直到所有的元素被访问完结束。迭代器只能往前不会后...
3.4 Task对象
> *Tasks* are used to schedule coroutines *concurrently*.
>
> When a coroutine is wrapped into a *Task* with functions like [`asyncio.create_task()`](https://docs.python.org/3.8/l...
定义生成器的方法非常简单,只要使用 yield 关键词即可。yield是生成、产生的意思,在Python中,它作为一个关键词,是生成器的标志。
[code lang="python"]
def generator_func():
yield 0
yield 1
...