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的Bottle框架中返回静态文件和JSON对象的方法
Apr 30 Python
基于python yield机制的异步操作同步化编程模型
Mar 18 Python
python opencv实现任意角度的透视变换实例代码
Jan 12 Python
Python之文字转图片方法
May 10 Python
Python Django 简单分页的实现代码解析
Aug 21 Python
详解python中index()、find()方法
Aug 29 Python
python 画3维轨迹图并进行比较的实例
Dec 06 Python
keras实现调用自己训练的模型,并去掉全连接层
Jun 09 Python
Python闭包装饰器使用方法汇总
Jun 29 Python
浅谈对python中if、elif、else的误解
Aug 20 Python
jupyter notebook 写代码自动补全的实现
Nov 02 Python
Opencv 图片的OCR识别的实战示例
Mar 02 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
Yii中的cookie的发送和读取
2016/07/27 PHP
Nginx环境下PHP flush失效的解决方法
2016/10/19 PHP
THinkPHP获取客户端IP与IP地址查询的方法
2016/11/14 PHP
php实现的pdo公共类定义与用法示例
2017/07/19 PHP
PHP设计模式之单例模式原理与实现方法分析
2018/04/25 PHP
this[] 指的是什么内容 讨论
2007/03/24 Javascript
Apply an AutoFormat to an Excel Spreadsheet
2007/06/12 Javascript
JavaScript Event学习第八章 事件的顺序
2010/02/07 Javascript
jQuery检测某个元素是否存在代码分享
2015/07/09 Javascript
jQuery三级下拉列表导航菜单代码分享
2020/04/15 Javascript
jquery实现全选、反选、获得所有选中的checkbox
2020/09/13 Javascript
JS获取地址栏参数的两种方法(简单实用)
2016/06/14 Javascript
AngularJS中实现动画效果的方法
2016/07/28 Javascript
浅谈js数组和splice的用法
2016/12/04 Javascript
如何学JavaScript?前辈的经验之谈
2016/12/28 Javascript
javascript流程控制语句集合
2017/09/18 Javascript
[01:02:06]LGD vs Mineski Supermajor 胜者组 BO3 第二场 6.5
2018/06/06 DOTA
python采集百度百科的方法
2015/06/05 Python
Python之日期与时间处理模块(date和datetime)
2017/02/16 Python
Python编程中flask的简介与简单使用
2018/12/28 Python
Python解压 rar、zip、tar文件的方法
2019/11/19 Python
python如何使用Redis构建分布式锁
2020/01/16 Python
Python turtle库的画笔控制说明
2020/06/28 Python
python 生成器需注意的小问题
2020/09/29 Python
python开发一款翻译工具
2020/10/10 Python
HTML5 visibilityState属性详细介绍和使用实例
2014/05/03 HTML / CSS
Stella McCartney官网:成衣、包袋、香水、内衣、童装及Adidas系列
2018/12/20 全球购物
英国手工制作的现代与经典的沙发和床:Love Your Home
2020/09/26 全球购物
构造方法和其他方法的区别
2016/04/26 面试题
材料物理专业个人求职信
2013/12/15 职场文书
财经学院自荐信范文
2014/02/02 职场文书
公司年会策划方案
2014/05/17 职场文书
煤矿安全生产标语
2014/06/06 职场文书
2014年党员整改措施
2014/10/24 职场文书
小学语文复习计划
2015/01/19 职场文书
《活见鬼》教学反思
2016/02/24 职场文书