实例讲解python中的协程


Posted in Python onOctober 08, 2018

python协程

线程和进程的操作是由程序触发系统接口,最后的执行者是系统;协程的操作则是程序员。

协程存在的意义:对于多线程应用,CPU通过切片的方式来切换线程间的执行,线程切换时需要耗时(保存状态,下次继续)。协程,则只使用一个线程,在一个线程中规定某个代码块执行顺序。

协程的适用场景:当程序中存在大量不需要CPU的操作时(IO),适用于协程;

event loop是协程执行的控制点, 如果你希望执行协程, 就需要用到它们。

event loop提供了如下的特性:

注册、执行、取消延时调用(异步函数)

创建用于通信的client和server协议(工具)

创建和别的程序通信的子进程和协议(工具)

把函数调用送入线程池中

下面我们来举个例子:

协程实例

import asyncio
 
asyncdef cor1():
  print("COR1 start")
  await
  cor2()
  print("COR1 end")
   
asyncdef cor2():
  print("COR2")
   
loop = asyncio.get_event_loop()
loop.run_until_complete(cor1())
loop.close()

最后三行是重点。

asyncio.get_event_loop() : asyncio启动默认的event loop

run_until_complete() : 这个函数是阻塞执行的,知道所有的异步函数执行完成,

close() : 关闭event loop。

以上就是本篇文章所讲述的所有内容,这篇文章主要介绍了python协程的相关知识,希望你能借助资料从而理解上述所说的内容。希望我在这片文章所讲述的内容能够对你有所帮助,让你学习python更加轻松。

Python 相关文章推荐
python调用cmd命令行制作刷博器
Jan 13 Python
初步认识Python中的列表与位运算符
Oct 12 Python
浅析Git版本控制器使用
Dec 10 Python
Python数据结构与算法之完全树与最小堆实例
Dec 13 Python
python读取与写入csv格式文件的示例代码
Dec 16 Python
python放大图片和画方格实现算法
Mar 30 Python
django小技巧之html模板中调用对象属性或对象的方法
Nov 30 Python
如何实现Django Rest framework版本控制
Jul 25 Python
关于Python-faker的函数效果一览
Nov 28 Python
Django用户身份验证完成示例代码
Apr 03 Python
使用Keras训练好的.h5模型来测试一个实例
Jul 06 Python
python实现经典排序算法的示例代码
Feb 07 Python
详解python分布式进程
Oct 08 #Python
python中多个装饰器的执行顺序详解
Oct 08 #Python
使用EduBlock轻松学习Python编程
Oct 08 #Python
Django forms组件的使用教程
Oct 08 #Python
详解关于Django中ORM数据库迁移的配置
Oct 08 #Python
面向初学者的Python编辑器Mu
Oct 08 #Python
Django 实现购物车功能的示例代码
Oct 08 #Python
You might like
PHP之认识(二)关于Traits的用法详解
2019/04/11 PHP
php设计模式之装饰模式应用案例详解
2019/06/17 PHP
php中get_object_vars()在数组的实例用法
2021/02/22 PHP
Prototype使用指南之string.js
2007/01/10 Javascript
jquery.fileEveryWhere.js 一个跨浏览器的file显示插件
2011/10/24 Javascript
精心挑选的15个jQuery下拉菜单制作教程
2012/06/15 Javascript
javascript右下角弹层及自动隐藏(自己编写)
2013/11/20 Javascript
JS实现alert中显示换行的方法
2015/12/17 Javascript
js 定义对象数组(结合)多维数组方法
2016/07/27 Javascript
js判断价格,必须为数字且不能为负数的实现方法
2016/10/07 Javascript
JavaScript如何实现图片懒加载(lazyload) 提高用户体验(增强版)
2016/11/30 Javascript
JS获取多维数组中相同键的值实现方法示例
2017/01/06 Javascript
基于JavaScript实现活动倒计时效果
2017/04/20 Javascript
Bootstrap table中toolbar新增条件查询及refresh参数使用方法
2018/05/18 Javascript
jQuery实现form表单序列化转换为json对象功能示例
2018/05/23 jQuery
bootstrap与pagehelper实现分页效果
2018/12/29 Javascript
一起写一个即插即用的Vue Loading插件实现
2019/10/31 Javascript
微信小程序实现点击页面出现文字
2020/09/21 Javascript
[49:12]完美世界DOTA2联赛PWL S2 Magma vs GXR 第二场 11.29
2020/12/02 DOTA
Python调用C/C++动态链接库的方法详解
2014/07/22 Python
Python实现基于二叉树存储结构的堆排序算法示例
2017/12/08 Python
Python实现的批量修改文件后缀名操作示例
2018/12/07 Python
Python 实现日志同时输出到屏幕和文件
2020/02/19 Python
Mac PyCharm中的.gitignore 安装设置教程
2020/04/16 Python
python 实现两个线程交替执行
2020/05/02 Python
使用豆瓣源来安装python中的第三方库方法
2021/01/26 Python
成人毕业生自我鉴定
2013/10/18 职场文书
大学生职业生涯规划书模版
2013/12/30 职场文书
金融行业职业生涯规划范文
2014/01/17 职场文书
2014年学校食堂工作总结
2014/11/25 职场文书
幼儿园辞职信范文
2015/02/27 职场文书
2015年政协委员工作总结
2015/05/20 职场文书
2015年卫生局工作总结
2015/07/24 职场文书
SpringBoot 集成Redis 过程
2021/06/02 Redis
Mysql中有关Datetime和Timestamp的使用总结
2021/12/06 MySQL
redis的list数据类型相关命令介绍及使用
2022/01/18 Redis