• eventlet 协程


    eventlet学习笔记之一:基本概念

    本系列文章翻译自英文官方文档,原文请访问官方文档

    基本用法

    如果这是您第一次使用Eventlet,您可能会发现设计模式文档中的示例是一个很好的起点。

    Eventlet是围绕绿色线程(即协程,我们使用术语可互换)的概念构建的,这些概念是为了进行与网络相关的工作而启动的。绿色线程与正常线程的区别主要有两种:

    • 绿线非常便宜,几乎是免费的。您不必像普通线程一样保存绿色线程。通常,每个网络连接至少会有一个绿色线程。
    • 绿色线程相互合作,而不是先发制人地安排。这种行为的主要优点是共享数据结构不需要锁,因为只有在显式调用yield时,另一个绿色线程才能访问数据结构。还可以检查诸如队列之类的原语以查看它们是否具有任何未决数据。

    主要API

    Greenthread Spawn

    eventlet.spawn(func, *args, **kw)

    创建一个绿色线程来执行func函数。多个绿色线程可以并发执行。spawn的返回值是一个greenthread.GreenThread对象,这个对象可以用来检索func函数的返回值或者异常信息。

    eventlet.spawn_n(func, *args, **kw)

    功能与spawn类似,但是没有返回值,也不抛异常。执行比spawn更快。

    eventlet.spawn_after(seconds, func, *args, **kw)

    spawn的延迟执行版本。

    注:Spawn是“量产”的意思。

    Greenthread 控制

    eventlet.sleep(seconds=0)

    挂起协程,使得别的协程可以执行。

    class eventlet.GreenPool

    池化技术控制并发。使得内存消耗、并发连接数是可控的,并进而为系统中的其他部分预留资源。

    class eventlet.GreenPile(协程堆)

    GreenPile对象表示“任务块”。一个GreenPile是一个可以被塞满任务的迭代器,任务的结果会在稍后被读出。

    class eventlet.Queue

    在协程之间通信、传递数据的工具。

    class eventlet.Timeout

    在协程中添加超时机制的工具。在指定超时时间后,抛出异常。

    打补丁函数

    eventlet.import_patched(modulename, *additional_modules, **kw_additional_modules)

    eventlet.monkey_patch(all = True,os = False,select = False,socket = False,thread = False,time = False )

    导入绿化过的模块。

    便利的网络函数

    • eventlet.connect(addr, family=, bind=None)
    • eventlet.listen(addr, family=, backlog=50, reuse_addr=True, reuse_port=None)¶
    • eventlet.wrap_ssl(sock, *a, **kw)¶
    • eventlet.serve(sock, handle, concurrency=1000)
    • class eventlet.StopServe
  • 相关阅读:
    纯html文件引入elementUI组件库要点记录
    广告牌安全监测,保障户外广告牌的安全与稳定
    深入理解JMM
    python + requests接口自动化测试框架(这一篇就完全足够了)
    数据结构第29节 后缀树和后缀数组
    vue3前端开发-开发环境安装篇
    Go1.20 新版覆盖率方案解读
    C语言达到什么水平才能从事单片机工作
    如何打开html格式文件?Win11打开html文件的方法
    基于FPGA的FIR数字滤波器设计(quartus和vivado程序都有)。
  • 原文地址:https://blog.csdn.net/qq_42533216/article/details/125887150