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 用户登录验证的小例子
Mar 06 Python
Python中的lstrip()方法使用简介
May 19 Python
Python通过正则表达式选取callback的方法
Jul 18 Python
详解Python3操作Mongodb简明易懂教程
May 25 Python
linux中如何使用python3获取ip地址
Jul 15 Python
python模拟键盘输入 切换键盘布局过程解析
Aug 15 Python
python 列表推导式使用详解
Aug 29 Python
使用 Python 遍历目录树的方法
Feb 29 Python
python如何解析复杂sql,实现数据库和表的提取的实例剖析
May 15 Python
Python如何实现的二分查找算法
May 27 Python
python 如何调用 dubbo 接口
Sep 24 Python
Python通过len函数返回对象长度
Oct 22 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使浏览器直接下载pdf文件的方法
2013/11/15 PHP
Linux系统下PHP-FPM的安装和配置教程
2015/08/17 PHP
快速解决PHP调用Word组件DCOM权限的问题
2017/12/27 PHP
CSS+Table图文混排中实现文本自适应图片宽度(超简单+跨所有浏览器)
2009/02/14 Javascript
JavaScript 无符号右移运算符
2009/04/17 Javascript
node.js中的fs.futimesSync方法使用说明
2014/12/17 Javascript
JavaScript判断前缀、后缀是否是空格的方法
2015/04/15 Javascript
Jquery使用小技巧汇总
2015/12/29 Javascript
分析js闭包引起的事件注册问题
2016/03/29 Javascript
JavaScript中数组的22种方法必学(推荐)
2016/07/20 Javascript
jQuery树插件zTree使用方法详解
2017/05/02 jQuery
使用jquery的jsonp如何发起跨域请求及其原理详解
2017/08/17 jQuery
js取0-9随机取4个数不重复的数字代码实例
2019/03/27 Javascript
vue项目添加多页面配置的步骤详解
2019/05/22 Javascript
微信小程序在线客服自动回复功能(基于node)
2019/07/03 Javascript
基于canvasJS在PHP中制作动态图表
2020/05/30 Javascript
详解Python中的日志模块logging
2015/06/19 Python
python将视频转换为全字符视频
2019/04/26 Python
Python实现平行坐标图的两种方法小结
2019/07/04 Python
Python阶乘求和的代码详解
2020/02/14 Python
浅谈Python中的异常和JSON读写数据的实现
2020/02/27 Python
python 实现压缩和解压缩的示例
2020/09/22 Python
利用Python优雅的登录校园网
2020/10/21 Python
python3爬虫中多线程的优势总结
2020/11/24 Python
Python使用paramiko连接远程服务器执行Shell命令的实现
2021/03/04 Python
初始化了一个没有run()方法的线程类,是否会出错?
2014/03/27 面试题
家长会学生家长演讲稿
2013/12/29 职场文书
自荐信格式简述
2014/01/25 职场文书
文秘人员工作职责
2014/01/31 职场文书
路政管理求职信
2014/06/18 职场文书
中国梦演讲稿5分钟
2014/08/19 职场文书
2015年个人自我剖析材料
2014/12/29 职场文书
2015年大学学生会工作总结
2015/05/13 职场文书
六一儿童节主持开场白
2015/05/28 职场文书
蜗居观后感
2015/06/11 职场文书
python 标准库原理与用法详解之os.path篇
2021/10/24 Python