文章目录

  • 1 协程
  • 2 异步编程
    • 3.1 事件循环
    • 3.2 async
    • 3.3 await
    • 3.4 Task对象

1 协程

协程不是由操作系统提供,由程序员人为提供(用户态上下文切换技术)

协称(Coroutine),也可以被称为微线程,是一种用户态内的上下文切换技术。简而言之,其实就是通过一个线程实现代码块相互切换执行。

实现协程的几种方法:

  • greenlet、早期模块
  • yield关键字
  • asynco装饰器(py3.4)
  • async、await关键字(py3.5)(推荐)

协程意义
在一个线程中,如果遇到IO等待时间,线程不会等,利用空闲的时间在去干其他事。

2 异步编程

3.1 事件循环

理解微一个死循环,去检测并执行某些代码

import asyncio# 生成或获取一个事件循环
loop = asyncio.get_event_loop()# 将任务放到 任务列表
loop.run_until_complete(任务)

3.2 async

协程函数:定义函数的时候async def 函数名
协程对象:执行协程函数()得到协程对象

# 协程对象
async def func():pass   # 内容不执行# 协程对象
result = func()

注意:执行协程函数创建爱协程对象,函数内部代码不会执行

事件循环处理函数内部代码

import asyncio# 协程对象
async def func():pass   # 内容不执行# 协程对象
result = func()# 添加事件,帮助执行函数内部代码 py3.4
#loop = asyncio.get_event_loop()
#loop.run_until_complete(result)# py3.7
asycio.run(result)

3.3 await

await + 可等待对象(协程对象、Future、Task)

await就是等待对象的值得到结果之后在继续往下走

案例一:

import asyncioasync def func():print("666")# 这里等待2秒,有其他任务执行其他任务,然后继续向后执行res = await asyncio.sleep(2)print("结束", res)asyncio.run(func())

案例二:

import asyncioasync def others():print("start")await asyncio.sleep(2)print("end")return "返回值"async def func():print("执行协程函数内部代码")# 遇到IO操作挂起当前协程(任务),等IO操作完成之后再继续往下执行。# 当前协程挂起时,事件循环可以去执行其他协程(任务)res = await others()print("IO请求结束,结果为:", res)asyncio.run(func())

案例三

import asyncioasync def others():print("start")await asyncio.sleep(2)print("end")return "返回值"async def func():print("执行协程函数内部代码")# 遇到IO操作挂起当前协程(任务),等IO操作完成之后再继续往下执行。# 当前协程挂起时,事件循环可以去执行其他协程(任务)res1 = await others()print("IO请求结束,结果为:", res1)res2 = await others()print("IO请求结束,结果为:", res2)asyncio.run(func())

3.4 Task对象

  • py3.7

  • 在事件循环中添加多个任务

  • Task用于并发调度协程,通过asyncio.create_task(协程对象)的方式创建爱你Task对象,这样可以让协程加入事件循环中等待被调度执行。除了使用asyncio.create_task()函数以外,还可以用更低层级的loop_create_task()ensure_future()函数。不建议手动实例化Task对象。

参考地址:
https://www.bilibili.com/video/BV1dD4y127bD

协程、asyncio、异步编程相关推荐

  1. python3异步编程_协程 Python异步编程(asyncio)

    协程(Coroutine) 也可以被称为微线程,是一种用户态内的上下文切换技术.简而言之,其实就是通过一个线程实现代码块相互切换执行. 直接上代码,例如: 同步编程 import time def f ...

  2. python协程和异步编程

    文章目录 协程 & 异步编程(asyncio) 1. 协程的实现 1.1 greenlet 1.2 yield 1.3 asyncio 1.4 async & awit 1.5 小结 ...

  3. python——asyncio模块实现协程、异步编程(一)

    我们都知道,现在的服务器开发对于IO调度的优先级控制权已经不再依靠系统,都希望采用协程的方式实现高效的并发任务,如js.lua等在异步协程方面都做的很强大. python在3.4版本也加入了协程的概念 ...

  4. python——asyncio模块实现协程、异步编程(三)

    [八]协程停止 future对象有几个状态: Pending Running Done Cancelled 创建future的时候,task为pending,事件循环调用执行的时候当然就是runnin ...

  5. python——asyncio模块实现协程、异步编程(二)

    [六]协程并发 定义tasks时可以设置多个ensure,也可以像多线程那样用append方法实现 tasks = [asyncio.ensure_future(coroutine1),asyncio ...

  6. java8 协程_Java8 异步编程—CompletableFuture

    Java 为并发编程提供了众多的工具,本文将重点介绍 Java8 中 CompletableFuture. 笔者在自己搜索资料及实践之后,避开已经存在的优秀文章的写作内容与思路,将以更加浅显的示例和语 ...

  7. python并发编程:协程asyncio、多线程threading、多进程multiprocessing

    python并发编程:协程.多线程.多进程 CPU密集型计算与IO密集型计算 多线程.多进程与协程的对比 多线程 创建多线程的方法 多线程实现的生产者-消费者爬虫 Lock解决线程安全问题 使用线程池 ...

  8. python3异步协程爬虫_Python实现基于协程的异步爬虫

    Python实现基于协程的异步爬虫 一.课程介绍 1. 课程来源 本课程核心部分来自<500 lines or less>项目,作者是来自 MongoDB 的工程师 A. Jesse Ji ...

  9. python异步爬虫_Python实现基于协程的异步爬虫

    Python实现基于协程的异步爬虫 一.课程介绍 1. 课程来源 本课程核心部分来自<500 lines or less>项目,作者是来自 MongoDB 的工程师 A. Jesse Ji ...

  10. python asyncio 异步编程-协程 2

    asyncio 异步编程 官方文档: 中文版:https://docs.python.org/zh-cn/3.8/library/asyncio.html 英文本:https://docs.pytho ...

最新文章

  1. [Android编程心得] Camera(OpenCV)自动对焦和触摸对焦的实现
  2. Ctrl+E快捷键,一键批量解决Excel中90%的问题!
  3. 求均值方差_协方差,方差,标准差
  4. 渗透知识-XSS跨站脚本攻击
  5. 修改zabbix后台登录账号和密码,提升为超级管理员
  6. CS224n笔记二:word2vec
  7. java lamda循环条件_Java lambda 循环累加求和代码
  8. cxf客户端访问方式
  9. 【Linux】一步一步学Linux——hexdump命令(267)
  10. Hello, AnnsShadow!
  11. 有一说一,确实。。 | 今日最佳
  12. Shiro框架原理及应用分析
  13. 又一尴尬问题!不少用户反馈iPhone 12屏幕特别“黄”
  14. Python+Selenium FAQ
  15. python数据挖掘orange
  16. 简历编写技巧-java开发工程师简历实战
  17. 8片74151扩展为64选1数据选择器
  18. 数据分析方法论和数据分析方法
  19. Android 点击键盘外 非输入框 关闭软键盘
  20. 建行手机银行4.0版本转账怎么不要求输入支付密码?

热门文章

  1. ORACLE 回滚段详解
  2. 第七十二节,文本样式
  3. OpenWrt DNS问题排查
  4. iOS开发UINavigation系列四——导航控制器UINavigationController
  5. 针对淡入淡出的定时轮播效果js
  6. Rails项目结构详解
  7. 小菜学习设计模式(五)—控制反转(Ioc)
  8. urllib2使用总结
  9. python执行外部命令或URL
  10. SCO UNIXWARE 文件系统损坏,后恢复数据成功