往期好文推荐
学习Python不需要程基础?

0基础不用怕,从0到1轻松教你入门Python

python系统学习流线图,教你一步一步学会python
成为一名做大数据开发的女程序员,并不是二狗进入大学时的第一目标。

前言

今天我们来聊聊Python协程,当Python学习到一定的深度,当你需要对代码进行优化提速时,就避不开异步编程,尤其是现在优秀的第三方库都实现了异步编程,这使得我们不得不学习。

本人也是最近开始学习这个概念,本次分享我们就来简单聊聊Python协程的概念和最基本的语法。

什么是协程

我们先来看看协程的概念。

协程(Coroutine),也可以被称为微线程,是一种用户态内的上下文切换技术。

概念是不是很不好理解,没关系,我们引入一个小学就学过的数学思考题。小明早上起床需要刷牙和烧水,刷牙需要5分钟,烧水需要8分钟,问小明总共需要几分钟完成这两件事情。

答案是8分钟,这你应该是知道的吧。其实这就是协程,现在我再来解释下,刷牙是一个函数,烧水时一个函数,那协程就是通过一个线程实现代码块相互切换执行。最后,如果你的时间不是很紧张,并且又想快速的python提高,最重要的是不怕吃苦,建议你可以架微♥信:762459510 ,那个真的很不错,很多人进步都很快,需要你不怕吃苦哦!大家可以去添加上看一下~

Python实现协程

我们首先来看看不用协程怎么来写。

import timedef brush_teeth():print('开始刷牙')time.sleep(5)print('刷牙完成')def boil_water():print('开始烧水')time.sleep(8)print('烧水完成')def main():start = time.time()brush_teeth()boil_water()end = time.time()print('花费时间{}s'.format(end-start))main()开始刷牙
刷牙完成
开始烧水
烧水完成
花费时间13.01053786277771s

看到没,需要13s,那我们来看看协程怎么写。

import asyncio
import timeasync def brush_teeth():print('开始刷牙')await asyncio.sleep(5)print('刷牙完成')async def boil_water():print('开始烧水')await asyncio.sleep(8)print('烧水完成')async def main():start = time.time()tasks = [asyncio.create_task(boil_water()),asyncio.create_task(brush_teeth())]await asyncio.wait(tasks)end = time.time()print('花费时间{}s'.format(end-start))asyncio.run(main())开始烧水
开始刷牙
刷牙完成
烧水完成
花费时间8.004523992538452s

用了协程后,程序就只需要8s了。所以协程很有用,协程一般应用在有IO操作的程序中,因为协程可以利用IO等待的时间去执行一些其他的代码,从而提升代码执行效率。

代码解释

最好,我们来解释一下代码。

(1)asyncio.run(main()),进入main函数,事件循环开始。

这里有必要解释一下事件循环,事件循环可以看做成while循环,一直循环着任务,当任务完成时,才会终止循环。

(2)tasks列表里面就创建了两个任务,这两个任务就进入到了事件循环,准备执行。

这里创建的任务就是协程对象,当用async关键字定义的函数就是协程函数,调用这个函数,返回的就是协程对象。

(3)await asyncio.wait(tasks)就会进入任务中,首先进入烧水任务,遇到IO(这里是睡眠),就跳入到另外一个一个任务(刷牙),然后又遇到IO,这里没有其他任务了,所以等待完成刷牙任务,就跳入到烧水任务,完成后,整个事件循环就结束了。

awit关键词就是等待的意思,后面接的是IO等待。

今天的分享就到这了,如果我的文章对你有帮助,别忘了点赞,收藏,转发,这对我有很大的帮助,我们下期再见~

python福利教程领取方式:
1、点赞+评论(勾选“同时转发”)
2、关注小编。并私信回复关键字【19】
(一定要私信哦~点击我的头像就能看到私信按钮了)

简单聊聊Python协程相关推荐

  1. python 协程可以嵌套协程吗_Python | 详解Python中的协程,为什么说它的底层是生成器?...

    今天是Python专题的第26篇文章,我们来聊聊Python当中的协程. 我们曾经在golang关于goroutine的文章当中简单介绍过协程的概念,我们再来简单review一下.协程又称为是微线程, ...

  2. python协程实时输出_python协程

    不知道你有没有被问到过有没有使用过的python协程? 协程是什么? 协程是一种用户态轻量级,是实现并发编程的一种方式.说到并发,就能想到了多线程 / 多进程模型,是解决并发问题的经典模型之一. 但是 ...

  3. python 协程可以嵌套协程吗_Python线程、协程探究(2)——揭开协程的神秘面纱...

    一.上集回顾 在上一篇中我们主要研究了python的多线程困境,发现多核情况下由于GIL的存在,python的多线程程序无法发挥多线程该有的并行威力.在文章的结尾,我们提出如下需求: 既然python ...

  4. c++ 协程_理解Python协程(Coroutine)

    由于GIL的存在,导致Python多线程性能甚至比单线程更糟. GIL: 全局解释器锁(英语:Global Interpreter Lock,缩写GIL),是计算机程序设计语言解释器用于同步线程的一种 ...

  5. python协程详解_彻底搞懂python协程-第一篇(关键词1-4)

    任何复杂的概念或系统都不是凭空出现的,我们完全可以找到它的演化历程,寻根究底终会发现,其都是在一系列并不那么复杂的简单组件上发展演化而来! by 落花僧 本文通过一系列关键概念,逐步递进理解协程. 0 ...

  6. python协程详解

    目录 python协程详解 一.什么是协程 二.了解协程的过程 1.yield工作原理 2.预激协程的装饰器 3.终止协程和异常处理 4.让协程返回值 5.yield from的使用 6.yield ...

  7. python gevent async_谈谈Python协程技术的演进

    原标题:谈谈Python协程技术的演进 Coding Crush Python开发工程师 主要负责岂安科技业务风险情报系统redq. 引言 1.1. 存储器山 存储器山是 Randal Bryant ...

  8. 夜来风雨声,Python协程知多少

    最近有很多的同学问,大家都知道多线程,多进程,那么这个协程有什么什么东西?难不成还是携程旅游(此处没有广告费)?能不能说一下Python协程,而且最好要讲清楚! 那行,今天将来讲解一下Python协程 ...

  9. python协程池爬虫_Python之协程爬虫 小说网协程爬虫案例

    在Gevent协程的使用中我们已经学会简单的使用协程,这篇文章我们通过协程爬虫来测试一下具体的效果.Gevent遇到IO阻塞时会自动切换任务: from gevent import monkey mo ...

最新文章

  1. 算法提高 学霸的迷宫
  2. go语言笔记——指针,和C用法以及本质一样,但不支持指针的+-运算!
  3. dede中list标签php,dedecms标签中什么表示列表标签
  4. H.264(MPEG-4 AVC)级别(Level)、DPB 与 MaxDpbMbs 详解(转载)
  5. java删除文件模糊_Java实现的模糊匹配某文件夹下的文件并删除功能示例
  6. Android动态布局
  7. 基于QItemDelegate的例子1 SpinBoxDelegate
  8. 电脑cpu和手机cpu的差距有多大?
  9. 贝叶斯公式的直观理解(先验概率/后验概率)(未完)
  10. Socket.io详解
  11. 任意数字大小写字母的随机数的产生
  12. fread函数和fwrite函数
  13. matlab解超静定方程,超定方程和最小二乘法 | 学步园
  14. Android 暗黑模式
  15. 聚名企服商标注册流程及资料(2022新版新手教程)
  16. 100base - CX/FX/LX/SX/ZX
  17. 干货:如何打造一个直播平台
  18. 【Spring Web教程】SpringBoot 实现一应用多端口
  19. 《Linux那些事儿之我是USB》我是U盘(7)狂欢是一群人的孤单
  20. Rectangle和RectangleF结构

热门文章

  1. php3级分类,关于php非递归三级分类输出json数据
  2. vim 删除多行_Vim 可视化模式入门
  3. 如何解决设置虚拟服务器不生效,nginx虚拟主机的配置不生效
  4. php 接口升级,PHP 开发 APP 接口 学习笔记与总结 - APP 接口实例 [6] 版本升级接口开发...
  5. php页面文件后缀名,PHP中获取文件扩展名的N种方法
  6. windows搭建SFTP服务器
  7. dubbo consumer 端口_Dubbo普普通通9问
  8. 保存blob到本地_用12行代码提取浏览器自动保存的密码
  9. spring定时每天早上八点_SpringBoot 如何实现并发定时任务?
  10. C语言里面具有外部链接的静态变量这里的链接是什么意思