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 05 Python
Python聊天室实例程序分享
Jan 05 Python
基于Python的接口测试框架实例
Nov 04 Python
python求最大连续子数组的和
Jul 07 Python
使用python实现ftp的文件读写方法
Jul 02 Python
使用django实现一个代码发布系统
Jul 18 Python
Python Django框架url反向解析实现动态生成对应的url链接示例
Oct 18 Python
Tensorflow实现多GPU并行方式
Feb 03 Python
使用python自动追踪你的快递(物流推送邮箱)
Mar 17 Python
python实现音乐播放和下载小程序功能
Apr 26 Python
python+django+selenium搭建简易自动化测试
Aug 19 Python
python飞机大战游戏实例讲解
Dec 04 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
十大“创意”战术!
2020/03/04 星际争霸
PHP 多维数组排序(usort,uasort)
2010/06/30 PHP
php实现的CSS更新类实例
2014/09/22 PHP
迪菲-赫尔曼密钥交换(Diffie?Hellman)算法原理和PHP实现版
2015/05/12 PHP
PHP使用第三方即时获取物流动态实例详解
2017/04/27 PHP
PHP正则验证字符串是否为数字的两种方法并附常用正则
2019/02/27 PHP
Laravel-添加后台模板AdminLte的实现方法
2019/10/08 PHP
Jquery 跨域访问 Lightswitch OData Service的方法
2013/09/11 Javascript
js jquery ajax的几种用法总结(及优缺点介绍)
2014/01/28 Javascript
jQuery选择器源码解读(五):tokenize的解析过程
2015/03/31 Javascript
JavaScript判断数组是否包含指定元素的方法
2015/07/01 Javascript
JS添加删除DIV的简单实例
2016/07/08 Javascript
JavaScript中误用/g导致的正则test()无法正确重复执行的解决方案
2016/07/27 Javascript
VC调用javascript的几种方法(推荐)
2016/08/09 Javascript
jQuery简单倒计时效果完整示例
2016/09/20 Javascript
jquery ajaxfileupload异步上传插件使用详解
2017/02/08 Javascript
Vue中使用vue-i18插件实现多语言切换功能
2018/04/25 Javascript
小程序图片长按识别功能的实现方法
2018/08/30 Javascript
详解ES6 Symbol 的用途
2018/10/14 Javascript
JS使用Dijkstra算法求解最短路径
2019/01/17 Javascript
5个你不知道的JavaScript字符串处理库(小结)
2020/06/01 Javascript
python使用BeautifulSoup分页网页中超链接的方法
2015/04/04 Python
Python不使用int()函数把字符串转换为数字的方法
2018/07/09 Python
pyqt5之将textBrowser的内容写入txt文档的方法
2019/06/21 Python
pytorch实现用CNN和LSTM对文本进行分类方式
2020/01/08 Python
详解python第三方库的安装、PyInstaller库、random库
2021/03/03 Python
英国户外装备商店:Ultimate Outdoors
2019/05/07 全球购物
下面这个程序执行后会有什么错误或者效果
2014/11/03 面试题
预备党员的自我评价
2014/03/12 职场文书
领导接待方案
2014/03/13 职场文书
遗嘱继承公证书
2014/04/09 职场文书
创先争优活动承诺书
2014/08/30 职场文书
手术室护士个人总结
2015/02/13 职场文书
转变工作作风心得体会
2016/01/23 职场文书
TV动画《神废柴☆偶像》公布先导PV
2022/03/20 日漫
python获取字符串中的email
2022/03/31 Python