首页 > 编程语言 >python之gevent

python之gevent

时间:2024-01-16 13:12:09浏览次数:22  
标签:协程 monkey python patch gevent 线程 import

gevent 是一个基于协程的 Python 网络库,它使用 Greenlet 库提供了一种高效的协程实现。

协程是一种轻量级的线程,允许并发执行,但没有真正的并行性。协程可 以在遇到 I/O 操作时自动地切换到其他任务,从而提高程序的并发能力。
然而,在标准的 Python 线程模型中,当一个线程遇到 I/O 操作时,它会被阻塞,直到 I/O 操作完成。这意味着在传统的多线程模型下,一个线程在等待 I/O 完成时 会占用一个线程资源,而其他线程则无法被调度执行。
monkey.patch_all() 是 gevent 提供的一个函数,用于实现对标准库的自动补丁,以便与协程一起使用。这个函数会对一些常见的阻塞式 I/O 操作进行替换,使其在 遇到阻塞时能够自动地切换到其他协程任务。
当你在执行 monkey.patch_all() 后,gevent 会修改 Python 的内置库,例如 socket、threading、time 等,以便在这些库中的 I/O 操作发生时进行协程切换。 这样一来,当使用 gevent 的 WSGIServer 启动一个服务器时,它会在遇到阻塞的 I/O 操作时自动切换到其他协程,而不会阻塞整个服务器。
总结起来,执行 monkey.patch_all() 会对 Python 的内置库进行补丁,使得在使用 gevent 的 WSGIServer 启动服务器时,能够自动地在 I/O 操作发生时切换到其 他协程,从而实现多线程的并发处理能力。这使得 gevent.pywsgi.WSGIServer 能够更高效地处理并发请求。

使用:

from gevent import monkey
monkey.patch_all()

 flask框架中使用

# flask_app/pywsgi.py
from gevent import monkey
monkey.patch_all()

import os
from gevent.pywsgi import WSGIServer
from app import app

http_server = WSGIServer(('0.0.0.0', int(os.environ['PORT_APP'])), app)
http_server.serve_forever()

 

标签:协程,monkey,python,patch,gevent,线程,import
From: https://www.cnblogs.com/xingxia/p/17967438/python_gevent

相关文章

  • python接口自动化框架零代码极限封装之流程用例和DDT数据驱动
    1.流程用例1.1什么是流程用例工具:postmanjmeter每个接口就是一个用例,称之为单接口用例自动化:pytestunittestyaml每个用例,可以包含多个接口,称之为流程用例需要多个接口配合才能完成例子:微信上传功能:获取token上传文件 商城购物功能选择商品加入购物车......
  • Python第二小节(运算)随笔
    importdecimalfromdecimalimportDecimala=eval(input('请输入你要计算的第一个数值:'))b=eval(input('请输入你要计算的第二个数值:'))print(Decimal(str(a))+Decimal(str(b)))#输入函数inputpresent=input('猴哥的礼物')print(present,type(present))''......
  • `PyInstaller`是一个将Python程序打包成独立可执行文件的工具,它提供了许多参数来配置
    `--distpath`是`PyInstaller`的一个参数,它用于指定生成的可执行文件(及其依赖)的存放路径¹²⁴。默认情况下,这些文件会被放置在当前目录下的`dist`文件夹中²。例如,如果你想让`dist`文件夹中的内容在桌面上生成,你可以这样使用`--distpath`参数⁴:```bashpyinstaller--on......
  • python 搜索旋转排序数组 多种解法
    二分查找:旋转排序数组中仍然可以应用二分查找算法。首先,我们找到数组中最小的元素的索引,也就是旋转点的位置。然后,我们根据目标值与旋转点的大小关系,在旋转点的左侧或右侧进行常规的二分查找。defsearch(nums,target):#寻找旋转点left,right=0,len(nums)-1......
  • 提高代码效率的6个Python内存优化技巧
    当项目变得越来越大时,有效地管理计算资源是一个不可避免的需求。Python与C或c++等低级语言相比,似乎不够节省内存。但是其实有许多方法可以显著优化Python程序的内存使用,这些方法可能在实际应用中并没有人注意,所以本文将重点介绍Python的内置机制,掌握它们将大大提高Python编程技能......
  • Python 异步编程原理篇之新旧协程实现对比
    协程的发展流程再来回顾一下协程的发展流程:python2.5为生成器引用.send()、.throw()、.close()方法python3.3为引入yieldfrom,可以接收返回值,可以使用yieldfrom定义协程Python3.4加入了asyncio模块Python3.5增加async、await关键字,在语法层面的提供支持python3.7使用......
  • python爬虫利器之Playwright
    Playwright是微软在2020年初开源的新一代自动化测试工具,它的功能类似于Selenium、Pyppeteer等,都可以驱动浏览器进行各种自动化操作。它的功能也非常强大,对市面上的主流浏览器都提供了支持,API功能简洁又强大。虽然诞生比较晚,但是现在发展得非常火热。1.Playwright的特点......
  • Python第四天学习笔记
    Python的用户交互input('请插入vip卡')input('输入密码')请插入vip卡23333输入密码6666'6666'print('*'*100)****************************************************************************************************print('*'......
  • python网站创建016:BootStrap
    什么是BootStrap?:是一个别人写好的javascript和css的代码,如果在开发项目的时候省点事,就可以在它的基础上来修改使用使用教程:https://www.runoob.com/bootstrap/bootstrap-tutorial.html下载:https://getbootstrap.net/   下载之后解压,解压之后可以随意打开一个文件,比如cs......
  • python中json.dumps() 与json.dump(),json.load()与json.loads()区别?
    json.dumps()将Python对象转换为JSON字符串,并返回该字符串。而json.dump()将Python对象转换为JSON字符串,并将该字符串写入文件。json.dumps()接受一个Python对象作为参数,而json.dump()接受两个参数:一个Python对象和一个写入数据的文件对象。json.dump()生......