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模拟enum枚举类型的方法小结
Apr 30 Python
Python黑魔法@property装饰器的使用技巧解析
Jun 16 Python
Python绘制3d螺旋曲线图实例代码
Dec 20 Python
Python实现控制台中的进度条功能代码
Dec 22 Python
pycharm 主题theme设置调整仿sublime的方法
May 23 Python
Django集成CAS单点登录的方法示例
Jun 10 Python
python函数与方法的区别总结
Jun 23 Python
python将字符串list写入excel和txt的实例
Jul 20 Python
pandas DataFrame创建方法的方式
Aug 02 Python
浅谈Python3 numpy.ptp()最大值与最小值的差
Aug 24 Python
小白教你PyCharm从下载到安装再到科学使用PyCharm2020最新激活码
Sep 25 Python
python 爬取吉首大学网站成绩单
Jun 02 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
如何开发一个虚拟域名系统
2006/10/09 PHP
PHP中通过HTTP_USER_AGENT判断是否为手机移动终端的函数代码
2013/02/14 PHP
php中使用$_REQUEST需要注意的一个问题
2013/05/02 PHP
PHP的mysqli_query参数MYSQLI_STORE_RESULT和MYSQLI_USE_RESULT的区别
2014/09/29 PHP
简单的Jquery遮罩层代码实例
2013/11/14 Javascript
javascript函数特点实例分析
2015/05/14 Javascript
基于Vue.js的表格分页组件
2016/05/22 Javascript
Javascript闭包与函数柯里化浅析
2016/06/22 Javascript
JS获取url参数、主域名的方法实例分析
2016/08/03 Javascript
jQuery实现表格与ckeckbox的全选与单选功能
2016/11/24 Javascript
微信小程序实现点击按钮修改字体颜色功能【附demo源码下载】
2017/12/05 Javascript
vue.js前后端数据交互之提交数据操作详解
2018/04/24 Javascript
基于vue-draggable 实现三级拖动排序效果
2020/01/10 Javascript
JavaScript实现简单的图片切换功能(实例代码)
2020/04/10 Javascript
JS使用for in有序获取对象数据
2020/05/19 Javascript
[01:06]DOTA2隆重推出2016冬季勇士令状 内含上海特级锦标赛互动指南
2016/02/17 DOTA
python模拟登录百度代码分享(获取百度贴吧等级)
2013/12/27 Python
python实现倒计时的示例
2014/02/14 Python
对Python3 pyc 文件的使用详解
2019/02/16 Python
Python检测数据类型的方法总结
2019/05/20 Python
python标准库OS模块函数列表与实例全解
2020/03/10 Python
pygame实现飞机大战
2020/03/11 Python
Python如何省略括号方法详解
2020/03/21 Python
Python selenium键盘鼠标事件实现过程详解
2020/07/28 Python
python利用paramiko实现交换机巡检的示例
2020/09/22 Python
西班牙国家航空官方网站:Iberia
2017/11/16 全球购物
美国最大的在线水培用品商店:GrowersHouse.com
2018/08/14 全球购物
在加拿大在线租赁和购买电子游戏:Game Access
2019/09/02 全球购物
2014全国两会学习心得体会1000字
2014/03/10 职场文书
小学生操行评语
2014/04/22 职场文书
初中班主任评语大全
2014/04/24 职场文书
工作保证书范文
2014/04/29 职场文书
先进工作者事迹材料
2014/12/23 职场文书
总结会主持词
2015/07/02 职场文书
分析设计模式之模板方法Java实现
2021/06/23 Java/Android
Python使用PyYAML库读写yaml文件的方法
2022/04/06 Python