基于asyncio库实现Python协程(Coroutines)及源码解析

本文介绍了Python的asyncio库及其用于异步编程的async/await语法。通过示例展示了如何使用async/await创建协程,并分析了asyncio.run和asyncio.create_task的源码,解释了事件循环的概念。此外,还讨论了asyncio.sleep与time.sleep的区别,并提供了使用asyncio.create_task和asyncio.gather实现协程并发的实战案例。
摘要由CSDN通过智能技术生成

1. asyncio是什么(官方文档入口)

asyncio is a library to write concurrent code using the async/await syntax.

官方文档里给的定义如上,简单来说就是用asyncio库里的async/await 语法来写一个异步代码。
asyncio库通常用来写高性能网络、web服务器、分布式任务队列等Python异步框架。

2. 使用async/await创建一个简单的协程用例及源码分析

import asyncio
import time

async def say_after(delay, what):
	"""
	创建一个可awaitable的程序
	"""
    await asyncio.sleep(delay)  # 挂起该程序delay s
    print(what)

async def main():
	"""
	创建一个协程程序入口
	"""
    print(f"started at {time.strftime('%X')}")
	
	# 直到两个awaitable任务结束程序才结束
    await say_after(2, 'hello')
    await say_after(1, 'world')

    print(f"finished at {time.strftime('%X')}")

asyncio.run(main())

## output
started at 17:13:52
hello
world
finished at 17:13:55

我们发现其实它还是一个同步的程序,并没有减少程序运行时间。现在我们改动一下main代码,再执行

async def main():
	"""
	创建一个协程程序入口
	"""
	# 使用asyncio.create_task添加任务
    task1 = asyncio.create_task(
        say_after(2, 'hello'))

    task2 = asyncio.create_task(
        say_after(1, 'world'))

    print(f"started at {time.strftime('%X')}"
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值