首页 > 其他 > 详细

协程基础

时间:2021-05-12 00:14:01      阅读:18      评论:0      收藏:0      [点我收藏+]
# -*- 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

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