使用asyncio实现并发

本文介绍了如何使用Python的asyncio库实现并发,通过实例展示了如何创建协程、任务列表和事件循环,以理解并发执行中任务阻塞与切换的过程。实验结果表明了并发与并行的区别,强调了asyncio在处理多任务中的灵活性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

并发和并行一直是容易混淆的概念。并发通常指有多个任务需要同时进行,并行则是同一时刻有多个任务执行。

asyncio实现并发,就需要多个协程来完成任务,每当有任务阻塞的时候就await,然后其他协程继续工作。创建多个协程的列表,然后将这些协程注册到时间循环中。

一、asyncio实现并发

import asyncio
import time
now  = lambda:time.time()
def events_demo():

async def do_some_work(x):
	print('Waiting:',x)
	await asyncio.sleep(x)
	return 'Done after {}s'.format(x)
start = now()

#创建多个协程对象
coroutine1=do_some_work(1)
coroutine1=do_some_work(2)
coroutine1=do_some_work(4)

#创建任务列表
tasks=[
	asyncio.ensure_future(coroutine1),
	asyncio.ensure_future(coroutine2),
	asyncio.ensure_future(coroutine3)
]
#将任务列表注册到事件循环中
loop=asyncio.get_event_loop()
loop.run_until_complete(asyncio.wait(tasks))

#获取返回的结果
for task in tasks:
	print('Task ret:',task.result())

print('TIME:',now()-start)

二、实验总结

运行结果显示,并行的话应该为1+2+4=7秒;并发每个任务里面执行do_some_work,第一次耗时是1秒,遇到耗时执行其他协程,第二次耗时是2秒,遇到耗时执行其他协程,以此类推。遇到耗时进行阻塞进行其他协程,最长的耗时为4秒,三个任务4秒多执行完成。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

极客范儿

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值