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中动态获取对象的属性和方法的教程
Apr 09 Python
Python字符串格式化
Jun 15 Python
约瑟夫问题的Python和C++求解方法
Aug 20 Python
关于python2 csv写入空白行的问题
Jun 22 Python
pandas的唯一值、值计数以及成员资格的示例
Jul 25 Python
解决pycharm 误删掉项目文件的处理方法
Oct 22 Python
Python日期时间Time模块实例详解
Apr 15 Python
Python中一个for循环循环多个变量的示例
Jul 16 Python
Python assert关键字原理及实例解析
Dec 13 Python
Python 实现try重新执行
Dec 21 Python
Python pickle模块常用方法代码实例
Oct 10 Python
python opencv人脸识别考勤系统的完整源码
Apr 26 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发送邮件类代码附详细说明
2008/07/10 PHP
基于php(Thinkphp)+jquery 实现ajax多选反选不选删除数据功能
2017/02/24 PHP
PHP Redis扩展无法加载的问题解决方法
2019/08/22 PHP
基于PHP实现堆排序原理及实例详解
2020/06/19 PHP
jquery $(document).ready() 与window.onload的区别
2009/12/28 Javascript
IE6/7/8/9不支持exec的简写方式
2011/05/25 Javascript
基于jquery的鼠标拖动效果代码
2012/05/30 Javascript
javascript里模拟sleep(两种实现方式)
2013/01/25 Javascript
JavaScript移除数组元素减少长度的方法
2013/09/05 Javascript
一个js导致的jquery失效问题的解决方法
2013/11/27 Javascript
JS 获取浏览器和屏幕宽高等信息代码
2014/03/31 Javascript
javascript实现复选框超过限制即弹出警告框的方法
2015/02/25 Javascript
JavaScript中数据结构与算法(四):串(BF)
2015/06/19 Javascript
JavaScript编程中window的location与history对象详解
2015/10/26 Javascript
详解Javascript事件驱动编程
2016/01/03 Javascript
Bootstrap入门书籍之(五)导航条、分页导航
2016/02/17 Javascript
JS模拟简易滚动条效果代码(附demo源码)
2016/04/05 Javascript
JS图片左右无缝隙滚动的实现(兼容IE,Firefox 遵循W3C标准)
2016/09/23 Javascript
React数据传递之组件内部通信的方法
2017/12/31 Javascript
微信小程序项目总结之点赞 删除列表 分享功能
2018/06/25 Javascript
vue.js实现的经典计算器/科学计算器功能示例
2018/07/11 Javascript
layui table设置前台过滤转义等方法
2018/08/17 Javascript
Paypal支付不完全指北
2020/06/04 Javascript
详解Java中String JSONObject JSONArray List转换
2020/11/13 Javascript
[42:22]DOTA2上海特级锦标赛C组小组赛#1 OG VS Archon第一局
2016/02/27 DOTA
PyQt5每天必学之事件与信号
2018/04/20 Python
python 平衡二叉树实现代码示例
2018/07/07 Python
Python列表推导式与生成器用法分析
2018/08/02 Python
python在新的图片窗口显示图片(图像)的方法
2019/07/11 Python
python matplotlib实现将图例放在图外
2020/04/17 Python
Python中Yield的基本用法
2020/10/18 Python
python使用scapy模块实现ARP扫描的过程
2021/01/21 Python
学前班评语大全
2014/05/04 职场文书
入党积极分子学习党的纲领思想汇报
2014/09/13 职场文书
2015年社区统计工作总结
2015/04/21 职场文书
sentinel支持的redis高可用集群配置详解
2022/04/01 Redis