天天看点

多任务协程示例

import asyncio
import time
async def request(url):
    print('正在下载',url)
    # 在异步协程中如果出现了同步模块相关的代码,那么就无法实现异步
    # time.sleep(2)
    # 当在asyncio中遇到阻塞操作必须手动挂起,使用await
    await asyncio.sleep(2)
    print('下载完毕',url)

start = time.time()
urls = [
    'www.baidu.com',
    'www.sogou.com',
    'www.360.com'
]

# 任务列表:存放多个任务对象
stasks = []
for url in urls:
	# 实例化三个协程
    c = request(url)
    # 任务,任务是协程真正的执行对象,协程定义计算方法,任务执行该方法
    task = asyncio.ensure_future(c)
    # 加入任务队列中
    stasks.append(task)

# 实例化一个loop    
loop = asyncio.get_event_loop()
# 需要将任务列表封装到wait中执行
loop.run_until_complete(asyncio.wait(stasks))
print(time.time()-start)
           

继续阅读