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 25 Python
详解Python中列表和元祖的使用方法
Apr 25 Python
一篇文章入门Python生态系统(Python新手入门指导)
Dec 11 Python
基于python socketserver框架全面解析
Sep 21 Python
Python之inspect模块实现获取加载模块路径的方法
Oct 16 Python
python批量修改图片后缀的方法(png到jpg)
Oct 25 Python
Python for循环与range函数的使用详解
Mar 23 Python
使用python的turtle函数绘制一个滑稽表情
Feb 28 Python
python判断是空的实例分享
Jul 06 Python
详解java调用python的几种用法(看这篇就够了)
Dec 10 Python
python scipy 稀疏矩阵的使用说明
May 26 Python
Python如何使用循环结构和分支结构
Apr 13 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下通过系统信号量加锁方式获取递增序列ID
2009/09/25 PHP
php iconv() : Detected an illegal character in input string
2010/12/05 PHP
Thinkphp实现MySQL读写分离操作示例
2014/06/25 PHP
PHP实现搜索地理位置及计算两点地理位置间距离的实例
2016/01/08 PHP
php实现图片上传并利用ImageMagick生成缩略图
2016/03/14 PHP
PHP的自定义模板引擎
2017/03/24 PHP
php+ajax实现无刷新文件上传功能(ajaxuploadfile)
2018/02/11 PHP
Yii框架常见缓存应用实例小结
2019/09/09 PHP
文本加密解密
2006/06/23 Javascript
JavaScript delete操作符应用实例
2009/01/13 Javascript
javascript 定义新对象方法
2010/02/20 Javascript
基于jquery的复制网页内容到WORD的实现代码
2011/02/16 Javascript
再说AutoComplete自动补全之实现原理
2011/11/05 Javascript
JavaScript移除数组内重复元素的方法
2015/03/18 Javascript
JavaScript实现跑马灯抽奖活动实例代码解析与优化(二)
2016/02/16 Javascript
Angularjs 实现移动端在线测评效果(推荐)
2017/04/05 Javascript
一个Js文件函数中调用另一个Js文件函数的方法演示
2017/08/14 Javascript
基于JavaScript实现前端数据多条件筛选功能
2020/08/19 Javascript
浏览器调试动态js脚本的方法(图解)
2018/01/19 Javascript
JS 验证码功能的三种实现方式
2018/11/26 Javascript
vuex actions异步修改状态的实例详解
2019/11/06 Javascript
让python json encode datetime类型
2010/12/28 Python
Python引用(import)文件夹下的py文件的方法
2014/08/26 Python
Python跨文件全局变量的实现方法示例
2017/12/10 Python
python实现一个简单的ping工具方法
2019/01/31 Python
Python和Java的语法对比分析语法简洁上python的确完美胜出
2019/05/10 Python
利用Python实现斐波那契数列的方法实例
2020/07/26 Python
使用Django的JsonResponse返回数据的实现
2021/01/15 Python
python3.9和pycharm的安装教程并创建简单项目的步骤
2021/02/03 Python
CSS3 实现的缩略图悬停效果
2020/12/09 HTML / CSS
应聘会计求职信
2014/06/11 职场文书
个人租房协议书(范本)
2014/10/14 职场文书
签订劳动合同通知书
2015/04/16 职场文书
董存瑞观后感
2015/06/11 职场文书
golang中的并发和并行
2021/05/08 Golang
Python爬虫实战之爬取携程评论
2021/06/02 Python