首页 > 编程语言 > 详细

python中的asyncio模块协程实现异步IO

时间:2021-08-12 23:24:48      阅读:31      评论:0      收藏:0      [点我收藏+]

在python3.4中,引入了asyncio模块,在3.5的版本中引入了asynic await 关键字。

这是asyncio的基础使用:

import requests
import time
import asyncio


# 异步函数定义需要加async装饰
async def get_request(url):
    print(开始请求的url:, url)
    await asyncio.sleep(2)    # 阻塞代码前需要加await,且该代码支持异步操作
    print(请求完成的url:, url)
    return 123

def callback(t):  # 为异步函数,t.result()为异步函数return的值。
    print(t.result())

url_ls = [
    http://www.baidu1.com,
    http://www.baidu2.com,
    http://www.baidu3.com
]

if __name__ == __main__:
    start = time.time()
    tasks = []  # 创建对象任务列表
    for url in url_ls:
        c = get_request(url)  # 创建协程对象
        task = asyncio.ensure_future(c)  # 创建任务对象
        tasks.append(task)  # 将任务对象加入到任务列表,统一执行
        task.add_done_callback(callback)  # 设置回调函数
    loop = asyncio.get_event_loop()  # 创建事件循环
    res = loop.run_until_complete(asyncio.wait(tasks))  # 执行任务
    print(总耗时为:, time.time()-start)

下面是配合aiohttp实现异步爬虫的代码:

import requests
import time
import asyncio
import aiohttp
from lxml import etree


# 异步函数定义需要加async装饰
async def get_request(url):
async with aiohttp.ClientSession() as session:
async with await session.get(url=url) as respones:
html = await respones.text()
print(len(html))
return html

def parse(t): # t为异步函数的任务对象 t.result()为异步函数return的值。
html = etree.HTML(t.result())
tag = html.xpath(r"//a/text()")
print(tag)

url_ls = [
‘http://www.baidu.com‘,
‘http://www.baidu.com‘,
‘http://www.baidu.com‘
]

if __name__ == ‘__main__‘:
start = time.time()
tasks = [] # 创建对象任务列表
for url in url_ls:
c = get_request(url) # 创建协程对象
task = asyncio.ensure_future(c) # 创建任务对象
tasks.append(task) # 将任务对象加入到任务列表,统一执行
task.add_done_callback(parse) # 设置回调函数
loop = asyncio.get_event_loop() # 创建事件循环
res = loop.run_until_complete(asyncio.wait(tasks)) # 执行任务
print(‘总耗时为:‘, time.time()-start)

 

python中的asyncio模块协程实现异步IO

原文:https://www.cnblogs.com/hehahahepython/p/15134200.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!