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之从if开始语句的征程
Sep 14 Python
python统计cpu利用率的方法
Jun 02 Python
flask使用session保存登录状态及拦截未登录请求代码
Jan 19 Python
Pytorch中的variable, tensor与numpy相互转化的方法
Oct 10 Python
python-docx文件定位读取过程(尝试替换)
Feb 13 Python
Python3标准库glob文件名模式匹配的问题
Mar 13 Python
Python request中文乱码问题解决方案
Sep 17 Python
Python调用JavaScript代码的方法
Oct 27 Python
python 爬虫请求模块requests详解
Dec 04 Python
python Autopep8实现按PEP8风格自动排版Python代码
Mar 02 Python
Python list列表删除元素的4种方法
Nov 01 Python
移除Selenium中window.navigator.webdriver值
Jun 10 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反射类ReflectionClass和ReflectionObject的使用方法
2013/11/13 PHP
PHP ADODB实现分页功能简单示例
2018/05/25 PHP
免费空间广告万能消除代码
2006/09/04 Javascript
jQuery对象和Javascript对象之间转换的实例代码
2013/03/20 Javascript
跟我学Nodejs(二)--- Node.js事件模块
2014/05/21 NodeJs
JS实现网页滚动条感应鼠标变色的方法
2015/02/26 Javascript
JS获取本周周一,周末及获取任意时间的周一周末功能示例
2017/02/09 Javascript
纯JS实现轮播图
2017/02/22 Javascript
js es6系列教程 - 基于new.target属性与es5改造es6的类语法
2017/09/02 Javascript
详解vue-cli3使用
2018/08/14 Javascript
微信小程序实现即时通信聊天功能的实例代码
2018/08/17 Javascript
原生JS实现的简单小钟表功能示例
2018/08/30 Javascript
vue-cli3+typescript初体验小结
2019/02/28 Javascript
微信小程序纯文本实现@功能
2020/04/08 Javascript
[56:00]2018DOTA2亚洲邀请赛 4.6 淘汰赛 VP vs TNC 第二场
2018/04/10 DOTA
[00:47]DOTA2荣耀之路6:玩不了啦!
2018/05/30 DOTA
Python如何实现守护进程的方法示例
2017/02/08 Python
python文本数据相似度的度量
2018/03/12 Python
Python中一些不为人知的基础技巧总结
2018/05/19 Python
python读取excel指定列数据并写入到新的excel方法
2018/07/10 Python
Python中的几种矩阵乘法(小结)
2019/07/10 Python
python 在sql语句中使用%s,%d,%f说明
2020/06/06 Python
python利用opencv实现颜色检测
2021/02/23 Python
html5 标签
2009/07/16 HTML / CSS
Html5新标签解释及用法
2012/02/17 HTML / CSS
REISS英国官网:伦敦High Street最受欢迎品牌
2016/12/21 全球购物
英国巧克力贸易公司:Chocolate Trading Company
2017/03/21 全球购物
怎样声明接口
2014/09/19 面试题
AJAX检测用户名是否存在的方法
2021/03/24 Javascript
篮球比赛口号
2014/06/10 职场文书
律师授权委托书范本
2014/10/07 职场文书
2014光棍节大学生联谊活动方案
2014/10/10 职场文书
2015年机关纠风工作总结
2015/05/15 职场文书
html5调用摄像头实例代码
2021/06/28 HTML / CSS
Redis做数据持久化的解决方案及底层原理
2021/07/15 Redis
Redis特殊数据类型HyperLogLog基数统计算法讲解
2022/06/01 Redis