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之引用和类属性的初步理解
May 15 Python
python自然语言编码转换模块codecs介绍
Apr 08 Python
Python实现文件按照日期命名的方法
Jul 09 Python
详解C++编程中一元运算符的重载
Jan 19 Python
Flask框架URL管理操作示例【基于@app.route】
Jul 23 Python
在PyCharm导航区中打开多个Project的关闭方法
Jan 17 Python
django删除表重建的实现方法
Aug 28 Python
python实现复制文件到指定目录
Oct 16 Python
Python如何基于selenium实现自动登录博客园
Dec 16 Python
python实现IOU计算案例
Apr 12 Python
python分布式爬虫中消息队列知识点详解
Nov 26 Python
基于Python的接口自动化读写excel文件的方法
Jan 15 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 日期加减的类,很不错
2009/10/10 PHP
详谈phpAdmin修改密码后拒绝访问的问题
2017/04/03 PHP
node.js chat程序如何实现Ajax long-polling长链接刷新模式
2012/03/13 Javascript
js自动闭合html标签(自动补全html标记)
2012/10/04 Javascript
js实现iGoogleDivDrag模块拖动层拖动特效的方法
2015/03/04 Javascript
JavaScript将数字转换成大写中文的方法
2015/03/23 Javascript
Vuex2.0+Vue2.0构建备忘录应用实践
2016/11/30 Javascript
JavaScript 详解预编译原理
2017/01/22 Javascript
AngularJS 打开新的标签页实现代码
2017/09/07 Javascript
JavaScript实现音乐自动切换和轮播
2017/11/05 Javascript
Vue不能检测到Object/Array更新的情况的解决
2018/06/26 Javascript
详解Vue源码中一些util函数
2019/04/24 Javascript
JavaScript前端页面搜索功能案例【基于jQuery】
2019/07/10 jQuery
[01:00:14]2018DOTA2亚洲邀请赛 4.6 淘汰赛 VP vs TNC 第三场
2018/04/10 DOTA
Python 时间处理datetime实例
2008/09/06 Python
Python实现并行抓取整站40万条房价数据(可更换抓取城市)
2016/12/14 Python
浅谈Python基础—判断和循环
2019/03/22 Python
python3中pip3安装出错,找不到SSL的解决方式
2019/12/12 Python
python字典setdefault方法和get方法使用实例
2019/12/25 Python
tensorflow 实现自定义梯度反向传播代码
2020/02/10 Python
python 线性回归分析模型检验标准--拟合优度详解
2020/02/24 Python
opencv中图像叠加/图像融合/按位操作的实现
2020/04/01 Python
如何打包Python Web项目实现免安装一键启动的方法
2020/05/21 Python
你需要学会的8个Python列表技巧
2020/06/24 Python
Selenium关闭INFO:CONSOLE提示的解决
2020/12/07 Python
加拿大最大的钻石商店:Peoples Jewellers
2018/01/01 全球购物
迷你唐卡软皮鞋:Minnetonka Moccasin
2018/05/01 全球购物
毕业生自荐书
2014/02/03 职场文书
高中军训第一天感言
2014/03/06 职场文书
幼儿园老师个人总结
2015/02/28 职场文书
2015年入党积极分子评语
2015/03/26 职场文书
婚礼上证婚人致辞
2015/07/28 职场文书
2019年朋友圈经典励志语录50条
2019/07/05 职场文书
一行代码python实现文件共享服务器
2021/04/22 Python
Pycharm 如何设置HTML文件自动补全代码或标签
2021/05/21 Python
如何开启Apache,Nginx和IIS服务器的GZIP压缩功能
2022/04/29 Servers