异步爬虫-多任务异步协程示例

一、多任务异步协程示例

import asyncio
import time

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

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

# 任务列表,用于存放多个任务对象
stasks = []

for url in urls:
    c = request(url)
    task = asyncio.ensure_future(c)
    stasks.append(task)

loop = asyncio.get_event_loop()
# 需要将任务列表封装到 wait中
loop.run_until_complete(asyncio.wait(stasks))
print(time.time() - start)

# 执行结果
	正在下载 www.baidu.com
	正在下载 www.sogou.com
	正在下载 www.toptops.top
	下载完毕 www.baidu.com
	下载完毕 www.sogou.com
	下载完毕 www.toptops.top
	2.0103530883789062
posted @ 2021-05-22 13:53  SRE运维充电站  阅读(55)  评论(0编辑  收藏  举报