当前位置: 首页 > 工具软件 > eventlet > 使用案例 >

eventlet 协程

林礼骞
2023-12-01

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=<AddressFamily.AF_INET: 2>, bind=None)
  • eventlet.listen(addr, family=<AddressFamily.AF_INET: 2>, backlog=50, reuse_addr=True, reuse_port=None)¶
  • eventlet.wrap_ssl(sock, *a, **kw)¶
  • eventlet.serve(sock, handle, concurrency=1000)
  • class eventlet.StopServe
 类似资料: