博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Python——eventlet.greenpool
阅读量:6282 次
发布时间:2019-06-22

本文共 2260 字,大约阅读时间需要 7 分钟。

  该模块提供对 greenthread 池的支持。

  greenthread 池提供了一定数量的备用 greenthread ,有效限制了孵化 greenthread 过多导致的内存不足,当池子中没有足够的空闲 greenthread 时,孵化过程被暂停,只有当先前工作中的 greenthread 完成当前工作,才能为下一个任务做孵化准备。

   本模块包括两个类:

  

  

 

一、 class eventlet.greenpool.GreenPool(size=1000) 

  该类的对象是 green threads 的池子,默认容量是1000个green threads。

该类的方法

  

  

  

  

  

  

  

  

  

1.

free() 

  返回当前对象中可用的greenthreads。

  如果为 0 或更少,那么 spawn() 和 spawn_n() 将会阻塞调用 greenthread 直到有新的可用的 greenthread 为止。

  至于为什么此处可能返回负值,请查看3. resize()

2.

imap(function, *iterables)  

  效果等同于 itertools.imap() ,在并发和内存使用上等同于 starmap() 。

  例如,可以非常方便地对文件做一些操作:

def worker(line):    return do_something(line)pool = GreenPool()for result in pool.imap(worker, open("filename", 'r')):    print(result)

3. 

resize(new_size) 

  改变当前允许同时工作的 greenthreads 最大数量

  如果当前有多于 new_size 的 greenthreads 处于工作中,它们可以完成自己的执行,只不过此时不许任何的新 greenthreads 被分配。只有当足够数量的 greenthreads 完成自己的工作,然后工作中的 greenthreads 总数低于 new_size 时,新的 greenthreads 才能被分配。在此之前,free() 的返回值将会使负的。 

4.

running()

  返回当前池子中正在执行任务的 greenthreads 。

5.

spawn(function, *args, **kwargs)         从当前的池子中孵化一个可用的greenthread,在这个 greenthread 中执行 
function ,参数
*args, **kwargs 为传给 
function 的参数。返回一个
GreenThread 对象,这个对象执行着
function ,可以通过该 
GreenThread 对象获取 
function 的返回值。   如果当前池子中没有空余的 greenthread ,那么该方法阻塞直到有新的可用的 greenthreads 被释放。   该函数可以重用,
function  可以调用同一个 GreenPool 对象的
spawn 方法,不用担心死锁。      6.
spawn_n(function, *args, **kwargs)       创建一个 greenthread 来运行 
function,效果等同于 
spawn()。 只不过这个函数返回 None,即丢弃 
function 的返回值。    7.
starmap(function, iterable)      等同于 
除了对于可迭代对象中的每一个元素,都会在一个 greenthread 里面执行 
func 。 并发的上限由池子的容量限制。在实际的操作中, starmap() 消耗的内存与池子的容量成比例,从而格外适合遍历特别长的输入列表。     8.
waitall()      等待池子中的所有 greenthreads 完成工作。    9.
waiting()      返回当前等待孵化的 greenthreads 数。    二、
class eventlet.greenpool.GreenPile(size_or_pool=1000)        GreenPile 是一些I/O相关任务的抽象。   可以使用一个已经存在的 GreenPool 对象构造一个 GreenPile ,这个 GreenPile 在处理自己的任务时将会用那个池子的并发。一个 GreenPool 可以对应多个 GreenPile。   一个 GreenPile 也可以独立构造,不与任何 GreenPool 绑定。只需要在创建实例时传入一个整数作为参数即可。   使用不是当前调用 spawn() 的 greenthread 迭代一个 GreenPile 并不明智,迭代器将会过早的退出。     该类的方法有
1.  
next() 

等待下一个结果,挂起当前的 greenthread 直到结果可用为止。 当没有更多的结果时,抛出 StopIteration 异常。

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

在它自己的 greenthread 中运行 func,结果储存在 GreenPile 对象中,可以迭代该对象获取这些结果。

转载于:https://www.cnblogs.com/Security-Darren/p/4168233.html

你可能感兴趣的文章
Serverless五大优势,成本和规模不是最重要的,这点才是
查看>>
Nginx 极简入门教程!
查看>>
iOS BLE 开发小记[4] 如何实现 CoreBluetooth 后台运行模式
查看>>
Item 23 不要在代码中使用新的原生态类型(raw type)
查看>>
为网页添加留言功能
查看>>
JavaScript—数组(17)
查看>>
Android 密钥保护和 C/S 网络传输安全理论指南
查看>>
以太坊ERC20代币合约优化版
查看>>
Why I Began
查看>>
同一台电脑上Windows 7和Ubuntu 14.04的CPU温度和GPU温度对比
查看>>
js数组的操作
查看>>
springmvc Could not write content: No serializer
查看>>
Python系语言发展综述
查看>>
新手 开博
查看>>
借助开源工具高效完成Java应用的运行分析
查看>>
163 yum
查看>>
第三章:Shiro的配置——深入浅出学Shiro细粒度权限开发框架
查看>>
80后创业的经验谈(转,朴实但实用!推荐)
查看>>
让Windows图片查看器和windows资源管理器显示WebP格式
查看>>
我的友情链接
查看>>