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检测网页是否有日常链接
Jun 03 Python
Python中list列表的一些进阶使用方法介绍
Aug 15 Python
python 中random模块的常用方法总结
Jul 08 Python
Python文件和流(实例讲解)
Sep 12 Python
对python中的pop函数和append函数详解
May 04 Python
matplotlib 纵坐标轴显示数据值的实例
May 25 Python
python 获取页面表格数据存放到csv中的方法
Dec 26 Python
Python实现的爬取百度文库功能示例
Feb 16 Python
详解Selenium+PhantomJS+python简单实现爬虫的功能
Jul 14 Python
使用matplotlib动态刷新指定曲线实例
Apr 23 Python
python下载的库包存放路径
Jul 27 Python
python中pickle模块浅析
Dec 29 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中echo()和print()、require()和include()等易混淆函数的区别
2012/02/22 PHP
关于PHP的相似度计算函数:levenshtein的使用介绍
2013/04/15 PHP
PHP制作3D扇形统计图以及对图片进行缩放操作实例
2014/10/23 PHP
php获取文件后缀的9种方法
2016/03/22 PHP
PHP操作MySQL中BLOB字段的方法示例【存储文本与图片】
2017/09/15 PHP
javaScript对象和属性的创建方法
2007/01/15 Javascript
js setTimeout opener的用法示例详解
2013/10/23 Javascript
现代 JavaScript 开发编程风格Idiomatic.js指南中文版
2014/05/28 Javascript
JavaScript面对国际化编程时的一些建议
2015/06/24 Javascript
Prototype框架详解
2015/11/25 Javascript
基于javascript实现tab选项卡切换特效调试笔记
2016/03/30 Javascript
浅析jquery如何判断滚动条滚到页面底部并执行事件
2016/04/29 Javascript
当jquery ajax遇上401请求的解决方法
2016/05/19 Javascript
通过jquery实现页面的动画效果(实例代码)
2016/09/18 Javascript
JavaScript的事件机制详解
2017/01/17 Javascript
详解JavaScript中js对象与JSON格式字符串的相互转换
2017/02/14 Javascript
bootstrap的工具提示实例代码
2017/05/17 Javascript
js中script的上下放置区别,Dom的增删改创建操作实例分析
2019/12/16 Javascript
JavaScript canvas实现跟随鼠标事件
2020/02/10 Javascript
js回调函数原理与用法案例分析
2020/03/04 Javascript
单线程JavaScript实现异步过程详解
2020/05/19 Javascript
vue-cli3项目配置eslint代码规范的完整步骤
2020/09/10 Javascript
[50:54]完美世界DOTA2联赛 GXR vs IO 第三场 11.07
2020/11/10 DOTA
python根据出生日期获得年龄的方法
2015/03/31 Python
Python制作爬虫采集小说
2015/10/25 Python
Django生成PDF文档显示在网页上以及解决PDF中文显示乱码的问题
2019/07/04 Python
python json.dumps中文乱码问题解决
2020/04/01 Python
python模拟点击在ios中实现的实例讲解
2020/11/26 Python
Vans(范斯)德国官网:美国南加州的原创极限运动潮牌
2017/05/02 全球购物
苹果台湾官网:Apple台湾
2019/01/05 全球购物
Myprotein西班牙官网:欧洲第一大运动营养品牌
2020/02/24 全球购物
初中地理教学反思
2014/01/11 职场文书
出纳员的岗位职责
2014/02/22 职场文书
药剂专业自荐书
2014/06/20 职场文书
2015年初中教务处工作总结
2015/07/21 职场文书
《为人民服务》教学反思
2016/02/20 职场文书