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 22 Python
Python实现的飞速中文网小说下载脚本
Apr 23 Python
Python 实现文件的全备份和差异备份详解
Dec 27 Python
详解 Python 读写XML文件的实例
Aug 02 Python
Python实现的爬取百度文库功能示例
Feb 16 Python
Django框架模板文件使用及模板文件加载顺序分析
May 23 Python
python按行读取文件并找出其中指定字符串
Aug 08 Python
Python3 翻转二叉树的实现
Sep 30 Python
tensorflow pb to tflite 精度下降详解
May 25 Python
Pytest如何使用skip跳过执行测试
Aug 13 Python
Python基于template实现字符串替换
Nov 27 Python
如何正确理解python装饰器
Jun 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.ini 中文版
2006/10/28 PHP
PHP CURL获取cookies模拟登录的方法
2013/11/04 PHP
PHP实现十进制数字与二十六进制字母串相互转换操作示例
2018/08/10 PHP
基于PHP实现邮箱验证激活过程详解
2020/10/28 PHP
用js实现的仿sohu博客更换页面风格(简单版)
2007/03/22 Javascript
JavaScript 产生不重复的随机数三种实现思路
2012/12/13 Javascript
jQuery :first选择器使用介绍
2013/08/09 Javascript
js实现精美的银灰色竖排折叠菜单
2015/05/16 Javascript
常用的Javascript设计模式小结
2015/12/09 Javascript
Seajs 简易文档 提供简单、极致的模块化开发体验
2016/04/13 Javascript
Angular1.x复杂指令实例详解
2017/03/01 Javascript
详解如何将angular-ui的图片轮播组件封装成一个指令
2017/05/09 Javascript
微信小程序开发之map地图实现教程
2017/06/08 Javascript
浅谈angular2路由预加载策略
2017/10/04 Javascript
vue的mixins属性详解
2018/03/14 Javascript
vue做移动端适配最佳解决方案(亲测有效)
2018/09/04 Javascript
基于vue中的scoped坑点解说
2020/09/04 Javascript
Python getopt模块处理命令行选项实例
2014/05/13 Python
使用httplib模块来制作Python下HTTP客户端的方法
2015/06/19 Python
python实现教务管理系统
2018/03/12 Python
pandas实现选取特定索引的行
2018/04/20 Python
python爬虫之urllib库常用方法用法总结大全
2018/11/14 Python
python SocketServer源码深入解读
2019/09/17 Python
python中uuid模块实例浅析
2020/12/29 Python
css3和jquery实现的可折叠导航菜单适合放在手机网页的导航菜单
2014/09/02 HTML / CSS
德国孕妇装和婴童服装网上商店:bellybutton
2018/04/12 全球购物
俄罗斯香水和化妆品购物网站:Л’Этуаль
2018/05/10 全球购物
新学期开学寄语
2014/01/18 职场文书
老总助理工作岗位职责
2014/02/06 职场文书
煤矿班组长竞聘书
2014/03/31 职场文书
宣传标语大全
2014/07/01 职场文书
大学生简短的自我评价
2014/09/12 职场文书
未婚证明书模板
2014/10/08 职场文书
人身损害赔偿协议书格式
2014/11/01 职场文书
2016反腐倡廉警示教育心得体会
2016/01/13 职场文书
在Python 中将类对象序列化为JSON
2022/04/06 Python