# -*- coding:utf8 -*-
?
‘‘‘
- 多任务异步协程【asyncio】
- 环境安装 pip install asyncio
?
- 特殊函数
- 如果一个函数的定义被asyncio关键字修饰,则该函数就编程了一个特殊的函数
- 特殊之处:
- 该函数调用后的函数的内部语句不会被【立即】执行
- 该函数被调用后会返回一个协程对象
- 协程
- 协程对象 == 特殊的函数
- 一个函数表示指定的一组操作,那么一个协程对象表示一组特定的操作
- 如何创建一个协程对象?
- 调用特殊函数的返回
- 任务对象
- 就是一个高级的协程对象
- 任务对象 == 协程对象 == 特殊的函数
- 任务对象也表示一组特定的操作
- 如何创建一个任务对象?
- task = asyncio.ensure_future(c) C指的是协程对象
- 事件循环:EventLoop
- 对象。
- 如何创建一个事件循环对象?
- loop = asyncio.get_event_loop()
- 作用:
- 是用来装载任务(协程)对象的,可以将事件循环当做一个容器,容器中存放的是多个任务对象
- 如果事件循环存放了多个任务对象且事件循环启动后,则事件循环对象可以
异步的将每一个任务对象对应的指定操作进行执行。
- 如何将任务对象存储且启动事件循环对象
- loop.run_until_complete(task) # 将一个任务对象进行了存储
- 问题:
- 事件循环启动后,任务对象对应的指定操作(特殊函数)已经被执行,但是如果这组指定操作中有反回值,返回值怎么获取?
那么任务对象在事件循环中是否是基于异步执行的呢?
- 问题的回答:
- 问题1:
- 如何获取函数中的反回值
- 基于任务函数的回调函数。
- 如何给任务函数绑定回调函数?
-
‘‘‘
import requests
import asyncio
?
# 特殊函数
async def get_requests(url):
print(‘太棒了马继你好厉害‘)
respons = requests.get(url).text
return respons
?
# 定义一个任务对的回调函数
# 注意:回调函数必须要有一个参数,该参数表示的就是该函数的绑定者
def parse(task): # task任务对象
page_text = task.result()
print("i am task callback",page_text)
if __name__ == ‘__main__‘:
# 返回一个协程对象
a=get_requests(‘http://www.baidu.com‘)
# 创建一个任务对象(基于已有的协程对象创建任务对象)
task = asyncio.ensure_future(a)
# 给该任务函数绑定一个回调函数
task.add_done_callback(parse)
# 创建一个事件循环对象
loop = asyncio.get_event_loop()
?
# 将task存储到eventloopz中且启动该对象
loop.run_until_complete(task)
?
# print(a)
原文:https://www.cnblogs.com/thaimj1314520/p/14757804.html