python多任务之协程的使用详解
作者:三国小梦 发布时间:2023-12-29 16:38:23
标签:python,协程,多任务
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多任务之协程的使用详解,网站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!
来源:https://www.cnblogs.com/lxy0/archive/2019/08/26/11413353.html
0
投稿
猜你喜欢
- SQLSTATESQL SERVER 驱动程序错误描述 HY000所有绑定列都是只读的。必须是可升级的列,以使用 SQLSetPos 或 S
- 基本介绍文件,对我们并不陌生,文件是数据源(保存数据的地方)的 一种输入流和输出流 文件在程序中是以流的形式来操作的流:数据在数据源(文件)
- 编写Python代码,大家都需要遵循PEP8,因此在pycharm中,如何设置每行最大长度限制,成为了一个小的知识盲点,在这里做一下记录,方
- 浏览器中某些计算和处理要比其他的昂贵的多。例如,DOM操作比起非DOM交互需要更多的内存和CPU时间。连续尝试进行过多的DOM相关操作可能会
- 实现思路1、场地部署:我们需要拥有一个可以用来画节点的地方!详看我这篇文章QGraphicsScene、QGraphicsView的基础使用
- 前言在数据库系统原理与设计(第3版)教科书中这样写道:数据库包含4类数据:1.用户数据2.元数据3.索引4.应用元数据其中,元数据也叫数据字
- 本文讲解函数记忆与菲波那切数列的实现,分享给大家,具体如下定义函数记忆是指将上次的计算结果缓存起来,当下次调用时,如果遇到相同的参数,就直接
- 废话不多说,先给大家展示一下效果图,如果大家感觉不错,请参考实现代码。效果图如下所示:代码如下所示:<!DOCTYPE html PU
- 引言我们前面的文章介绍了数字和字符串,比如我计算今天一天的开销花了多少钱我可以用数字来表示,如果是整形用 int ,如果是小数用 float
- MySQL支持的两种主要表存储格式MyISAM,InnoDB,上个月做个项目时,先使用了InnoDB,结果速度特别慢,1秒钟只能插入10几条
- 本文实例讲述了smarty简单分页的实现方法,分享给大家供大家参考。具体实现方法如下:以下是模板中的smarty代码,用smarty简单的代
- 前言: 在项目中,我用到了vue +iview + vue-router 开发; 然后导航条就使用了iview的Menu组件,结果发觉导航条
- Flask 是一个 Python 实现的 Web 开发微框架。这篇文章是一个讲述如何用它实现传送视频数据流的详细教程。我敢肯定,现在你已经知
- 本文实例讲述了Python基于递归算法实现的汉诺塔与Fibonacci数列。分享给大家供大家参考,具体如下:这里我们通过2个例子,学习pyt
- 静态页面由于其稳定性快速性,的确给SE、用户及站长带来了方便。但有时,需要记住用户的信息,如用户留下评论后,下一次再来,就要记住该用户的信息
- 一、FFmpeg 多个音频合并的2种方法多个mp3文件合并成一个mp3文件一种方法是连接到一起ffmpeg64.exe -i "c
- 请问如何使用CDONTS组件来发送电子邮件?我们可以在IIS4下使用CDONTS来完成。首先要确认是否安装了SMTP服务(OPTIONPAC
- 华为2019在线笔试题,现整理如下,以供之后参考GitHub题目介绍####################################
- 1. 在控制台输入以下命令,检查Jupyter notebook的安装目录jupyter notebook --generate-confi
- 其中用到urllib2模块和正则表达式模块。下面直接上代码:[/code]#!/usr/bin/env python#-*- coding: