我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Python协程之Gevent

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Python协程之Gevent

协程,又称微线程,即为轻量级的线程。
python中实现协程是基于Gevent模块,Gevent模块内部封装了greenlet模块;greenlet模块实现了在单线程中切换状态,Gevent模块在此之上还实现了遇到I/O操作自动切换,使程序运行更快;但是Gevent只在遇到自己认识的I/O操作时切换,所以需要使用Gevent包的一个模块:猴子补丁,使用了这个补丁,Gevent会直接修改在它之后导入的模块中的I/O操作,使其可以让Gevent识别,从而开启协程。
Greenlet与Gevent模块都是python的第三方模块,需安装使用。

主要方法:

g = greenlet(run=None, parent=None):实例化一个greenlet对象
g.parent:每一个协程都有一个父协程,当前协程结束后会回到父协程中执行,该属性默认是创建该协程的协程
g.run: 该属性是协程实际运行的代码. run方法结束了,那么该协程也就结束了
g.switch(*args, **kwargs): 切换到g协程
g.throw(): 切换到g协程,接着抛出一个异常

示例:

from greenlet import greenlet

def work():
    print("1")
    g2.switch() # 切换到g2协程
    print("3")
    g2.switch()

def work2():
    print("2")
    g1.switch()
    print("4")

g1 = greenlet(work)  # 创建一个greenlet实例
g2 = greenlet(work2)
g1.switch() # 切换到g1协程

结果:

1
2
3
4

示例1:

from gevent import monkey
monkey.patch_all()      # monkey补丁会将在它之后导入的模块的IO操作打包,使gevent认识他们
import gevent

def work1():
    print("1")
    gevent.sleep(1)
    print("3")

def work2():
    print("2")
    gevent.sleep(1)
    print("4")

g1 = gevent.spawn(work1)
g2 = gevent.spawn(work2)

# g1.join()
# g2.join()

gevent.joinall([g1,g2])

示例2:爬取网页

from gevent import monkey;monkey.patch_all()
import gevent
import requests

def get_url(url):
    res = requests.get(url)
    print(url,res.status_code,len(res.text))

url_l = [
    'http://www.baidu.com',
    'http://www.google.com',
    'https://zh.wikipedia.org/wiki/Wikipedia:%E9%A6%96%E9%A1%B5',
    'https://www.youtube.com/?app=desktop',
    'https://www.facebook.com/',
    'http://www.python.org',
    'http://www.cnblogs.com'
]
g_l = []
for i in url_l:
    g_l.append(gevent.spawn(get_url,i))
gevent.joinall(g_l)

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

Python协程之Gevent

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

Python协程之Gevent

协程,又称微线程,即为轻量级的线程。python中实现协程是基于Gevent模块,Gevent模块内部封装了greenlet模块;greenlet模块实现了在单线程中切换状态,Gevent模块在此之上还实现了遇到I/O操作自动切换,使程序运
2023-01-31

Python使用gevent实现协程

Python中多任务的实现可以使用进程和线程,也可以使用协程。  一、协程介绍  协程,又称微线程。英文名Coroutine。协程是Python语言中所特有的,在其他语言中没有。  协程是python中另外一种实现多任务的方式,比线程更小、
2023-01-31

Python中gevent模块协程使用

目录背景什么是协程?什么是 gevent?协程的例子Q&AQ:gevent 无法捕获的耗时A:猴子补丁实践异步 requests 请求gevent 的锁Tip背景因为 Python 线程的性能问题,在 Python 中使用多线程运行代码经常
2022-06-02

Python中gevent模块协程怎么用

这篇文章主要介绍Python中gevent模块协程怎么用,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!背景因为 Python 线程的性能问题,在 Python 中使用多线程运行代码经常不能达到预期的效果。而实际开发中
2023-06-20

怎么在Python中使用gevent实现协程

怎么在Python中使用gevent实现协程?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。python是什么意思Python是一种跨平台的、具有解释性、编译性、互动性和面向对象
2023-06-14

多任务-----协程gevent的使用

协程一,迭代器iterable 能实现一定的数据,但是又不会占用很大的空间,协程切换任务资源小,效率高。如何判断某一类型是否可以迭代from collections import Iterable


print(isinstance([
2023-01-31

python3--协程,greenlet模块,gevent模块

python之路——协程引子之前学习了线程、进程的概念,了解了在操作系统中进程是资源分配的最小单位,线程是CPU调度的最小单位。按道理来说我们已经算是把cpu的利用率提高很多了。但是我们知道无论是创建多进程还是创建多线程来解决问题,都要消耗
2023-01-30

python之协程

协程,又称微线程,纤程。英文名Coroutine。协程是一种用户态的轻量级线程。  所谓用户态就是说协程是由用户来控制的,CPU不认识协程,协程是跑在线程中的。  协程拥有自己的寄存器上下文栈。协程调试切换时,将寄存器上下文栈保存到其他地方
2023-01-31

python并发之协程

概念协程,又称微线程。英文名Coroutine。 子程序,或者称为函数,在所有语言中都是层级调用,比如A调用B,B在执行过程中又调用了C,C执行完毕返回,B执行完毕返回,最后是A执行完毕。所以子程序调用是通过栈实现的,一个线程就是执行一个子
2023-01-31

Python网络编程之协程

What is the association?与子例程一样,协程也是一种程序组件。 相对子例程而言,协程更为一般和灵活,但在实践中使用没有子例程那样广泛。 协程源自Simula和Modula-2语言,但也有其他语言支持。 协程更适合于用来
2023-01-31

Python并发编程之协程

协程介绍协程:是单线程下的并发,又称微线程,纤程。协程是一种用户态的轻量级线程,即线程是由用户程序自己控制调度的。需要强调的是:#1. python的线程属于内核级别的,即由操作系统控制调度(如单线程遇到io或执行时间过长就会被迫交出cpu
2023-01-30

python协程

目录 python协程入门 函数的执行顺序 协程概念 总结 python协程入门函数的执行顺序在了解协程之前, 我们需要再
2023-01-30

python 协程

进程和线程都会的切换都要消耗时间,保存线程进程当前状态以便下次继续执行。在不怎么需要cpu的程序中,即相对于IO密集型的程序,协程相对于线程进程资源消耗更小,切换更快,更适用于IO密集型。协程也是单线程的,没法利用cpu的多核,想利用cpu
2023-01-30

Python网络编程之HTTP协议的python应用

HTTP是在网络上传输HTML的协议,用于浏览器和服务器的通信,这篇文章主要介绍了Python网络编程之HTTP协议的python应用,需要的朋友可以参考下
2022-11-13

python协程与golang协程的区

进程、线程和协程进程的定义:进程,是计算机中已运行程序的实体。程序本身只是指令、数据及其组织形式的描述,进程才是程序的真正运行实例。线程的定义:操作系统能够进行运算调度的最小单位。它被包含在进程之中,是进程中的实际运作单位。进程和线程的关系
2023-01-31

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录