python多任务之协程的使用详解


Posted in Python onAugust 26, 2019

1|0使用yield完成多任务

import time
def test1():
 while True:
  print("--1--")
  time.sleep(0.5)
  yield None
def test2():
 while True:
  print("--2--")
  time.sleep(0.5)
  yield None
if __name__ == "__main__":
  t1 = test1()
  t2 = test2()
  while True:
    next(t1)
    next(t2)

2|0使用greenlet完成多任务

如果没有安装,则pip install greenlet

from greenlet import greenlet
import time
def test1():
 while True:
  print("---A---")
  gr2.switch()
  time.sleep(0.5)
def test2():
 while True:
  print("---b---")
  gr1.switch()
  time.sleep(0.5)
gr1 = greenlet(test1)
gr2 = greenlet(test2)
gr1.switch()

3|0使用gevent完成多任务

首先使用pip install gevent进行安装

gevent是对greenlet的再次封装,使用起来更加简便,当有耗时操作时会自动切换到其他协程。gevent封装了常用的耗时操作,如thread、socket、time、multiprocessing等模块。

import gevent
import time
from gevent import monkey
# 打补丁,不需要改原来的耗时操作,否则是要使用gevent提供的模块
monkey.patch_all()
def f(n):
 for i in range(n):
  print(gevent.getcurrent(), i)
  # 使用gevent提供的耗时模块
  # gevent.sleep(0.5)
  time.sleep(0.5)
g1 = gevent.spawn(f, 5)
g2 = gevent.spawn(f, 5)
g3 = gevent.spawn(f, 5)
# g1.join()
# g2.join()
# g3.join()
# 一次性添加全部的任务
gevent.joinall([g1,g2,g3])

总结

以上所述是小编给大家介绍的python多任务之协程的使用详解,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!

Python 相关文章推荐
python中关于时间和日期函数的常用计算总结(time和datatime)
Mar 08 Python
Python的print用法示例
Feb 11 Python
Python脚本文件打包成可执行文件的方法
Jun 02 Python
Python设置默认编码为utf8的方法
Jul 01 Python
详解Python中的文件操作
Aug 28 Python
python3.5实现socket通讯示例(TCP)
Feb 07 Python
Python获取当前函数名称方法实例分享
Jan 18 Python
解决Atom安装Hydrogen无法运行python3的问题
Aug 28 Python
python上传时包含boundary时的解决方法
Apr 08 Python
python实现飞船游戏的纵向移动
Apr 24 Python
python编程简单几行代码实现视频转换Gif示例
Oct 05 Python
Python爬虫入门案例之回车桌面壁纸网美女图片采集
Oct 16 Python
python数组循环处理方法
Aug 26 #Python
python中利用numpy.array()实现俩个数值列表的对应相加方法
Aug 26 #Python
关于Python中的向量相加和numpy中的向量相加效率对比
Aug 26 #Python
python中sort和sorted排序的实例方法
Aug 26 #Python
对Python 中矩阵或者数组相减的法则详解
Aug 26 #Python
Numpy 中的矩阵求逆实例
Aug 26 #Python
利用python-docx模块写批量生日邀请函
Aug 26 #Python
You might like
PHP数组内存耗用太多问题的解决方法
2010/04/05 PHP
php使用explode()函数将字符串拆分成数组的方法
2015/02/17 PHP
jQuery+PHP发布的内容进行无刷新分页(Fckeditor)
2015/10/22 PHP
浅析PHP中call user func()函数及如何使用call user func调用自定义函数
2015/11/05 PHP
YII2框架中behavior行为的理解与使用方法示例
2020/03/13 PHP
PHP实现页面静态化深入讲解
2021/03/04 PHP
一个js封装的不错的选项卡效果代码
2008/02/15 Javascript
COM中获取JavaScript数组大小的代码
2009/11/22 Javascript
javascript循环变量注册dom事件 之强大的闭包
2010/09/08 Javascript
JAVASCRIPT函数作用域和提前声明 分享
2013/08/22 Javascript
JavaScript采用递归算法计算阶乘实例
2015/08/04 Javascript
jQuery实现二级下拉菜单效果
2016/01/05 Javascript
jQuery无缝轮播图代码
2016/12/22 Javascript
微信小程序 监听手势滑动切换页面实例详解
2017/06/15 Javascript
用VueJS写一个Chrome浏览器插件的实现方法
2019/02/27 Javascript
el-select 下拉框多选实现全选的实现
2019/08/02 Javascript
微信小程序之侧边栏滑动实现过程解析(附完整源码)
2019/08/23 Javascript
JS中的const命令你真懂它吗
2020/03/08 Javascript
AJAX XMLHttpRequest对象创建使用详解
2020/08/20 Javascript
VSCode插件安装完成后的配置(常用配置)
2020/08/24 Javascript
Python的一些用法分享
2012/10/07 Python
Python 动态变量名定义与调用方法
2020/02/09 Python
windows10 pycharm下安装pyltp库和加载模型实现语义角色标注的示例代码
2020/05/07 Python
django中嵌套的try-except实例
2020/05/21 Python
css3实例教程 一款纯css3实现的环形导航菜单
2014/10/20 HTML / CSS
利用Bootstrap实现漂亮简洁的CSS3价格表实例源码
2017/03/02 HTML / CSS
简历上的自我评价怎么写
2014/01/28 职场文书
片区教研活动总结
2014/07/02 职场文书
甜品店创业计划书
2014/09/21 职场文书
实习单位证明范例
2014/11/17 职场文书
2015年党建工作总结
2015/03/30 职场文书
检讨书怎么写
2015/05/07 职场文书
宇宙与人观后感
2015/06/05 职场文书
教你用Python写一个植物大战僵尸小游戏
2021/04/25 Python
MySQL分区以及建索引的方法总结
2022/04/13 MySQL
使用python绘制横竖条形图
2022/04/21 Python