练习PYTHON之EVENTLET

练习PYTHON之EVENTLET

以下是重点,要会运用:

eventlet是一个用来处理和网络相关的python库函数,而且可以通过协程来实现并发,在eventlet里,把“协程”叫做 greenthread(绿色线程)。所谓并发,就是开启了多个greenthread,并且对这些greenthread进行管理,以实现非阻塞式的 I/O。比如说用eventlet可以很方便的写一个性能很好的web服务器,或者是一个效率很高的网页爬虫,这都归功于eventlet的“绿色线程”,以及对“绿色线程”的管理机制。更让人不可思议的是,eventlet为了实现“绿色线程”,竟然对python的和网络相关的几个标准库函数进行了改写,并且可以以补丁(patch)的方式导入到程序中,因为python的库函数只支持普通的线程,而不支持协程,eventlet称之为“绿化”。

它通过greenlet提供的协程功能,让开发者可以不用将以往的多线程等并发程序的开发方式转变成异步状态机模型,就能直接使用select/epoll/kqueue等操作系统提供的支持高并发IO接口,并且能尽可能地发挥它们在并发上的优势。

与它同类的另一款产品是Gevent,它们有着很类似的设计。

在CPython下,由于Gevent使用了Cython绑定了libev或者libevent等C库,导致Gevent比eventlet有着更优秀的性能。

但是也因为Cython写的部分组件,导致Gevent无法借助PyPy来给它加速,而eventlet则没有这个限制。在PyPy的加速下,eventlet的性能可以有成倍的提升。

 

urls = [
    "http://images2015.cnblogs.com/blog/465438/201511/465438-20151118221619921-967751972.png",
    "http://images2015.cnblogs.com/blog/465438/201511/465438-20151118160713436-1672394517.png",
    "http://images2015.cnblogs.com/blog/465438/201511/465438-20151118160722233-314107087.png",
]

import eventlet
from eventlet.green import urllib2

def fetch(url):
    return urllib2.urlopen(url).read()

pool = eventlet.GreenPool()
for body in pool.imap(fetch, urls):
    print("got body", len(body))

  练习PYTHON之EVENTLET

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/109245.html原文链接:https://javaforall.net

(0)
上一篇 2021年9月10日 下午9:00
下一篇 2021年9月10日 下午9:00


相关推荐

  • Python程序设计 第7章:Python面向对象编程

    Python程序设计 第7章:Python面向对象编程Python 程序设计第 7 章 Python 面向对象编程 7 1 面向对象编程概述 7 1 1OOP 的产生 7 1 2OOP 核心思想 7 1 3OOP 特征 7 2 类和对象 7 2 1 类的创建 7 2 2 对象的创建 7 2 3 类的属性 7 2 4 类的方法 7 2 5 内部类 7 2 6 魔术方法 7 3 类间关系 7 3 1 依赖关系 7 3 2 关联关系 7 3 3 继承关系 7 4 总结 7 1 面向对象编程概述 7 1 1OOP 的产生 7 1 2OOP 核心思想 7 1 3OOP 特征 7 2 类和对象 7 2 1 类

    2026年3月19日
    2
  • test.py是什么文件_exe文件反编译源码工具

    test.py是什么文件_exe文件反编译源码工具"java"]//P6DataSourcep6DSource=newP6DataSource(cpDSource)publicclassP6DataSourceextendsP6BaseimplementsDataSource,Referenceable,Serializable{//source是通过构造传入的数据源c3p0或DruidpublicP6DataSource(DataSourcesource)

    2022年10月5日
    5
  • ConcurrentSkipListMap 图解

    ConcurrentSkipListMap 图解疯狂创客圈经典图书 NettyZookeep 高并发实战 面试必备 面试必备 面试必备 博客园总入口 疯狂创客圈经典图书 SpringCloud Nginx 高并发核心编程 大厂必备 大厂必备 大厂必备 博客园总入口 入大厂 涨工资必备 高并发 亿级流量 IM 实战 实战系列 SpringCloudN 秒杀 实战系列 博客园总入口 1ConcurrentS

    2026年3月19日
    3
  • 关于软件定义网络SDN(服务器虚拟化的定义)

    1、SDN软件定义网络在传统的网络中,各个转发节点(路由器、交换机)都是独立工作的,内部管理命令和接口也是厂商私有的,不对外开放。而SDN(SoftwareDefinedNetworking)网络,就是在网络上建立了一个SDN控制器节点,统一管理和控制下层设备的数据转发,可以理解为软件定义的网络或者软件控制的网络。下级节点的管理功能被剥离给了SDN控制器,只剩下转发功能。SDN,SoftwareDefinedNetworking,即软件定义网络。或者也可以理解为,软件定义的网络、软件控制的网络、

    2022年4月18日
    47
  • C语言数组初始化问题

    C语言数组初始化问题最近在复习 C 语言 然后做题时突然想到了数组的初始化问题 然后查阅资料了解到结论 全局和静态数组都按语言规范要求被初始化为 0 对于局部数组 初始化元素个数少于数组元素个数时 数组前面的元素值对应初始化值 后面未被初始化的元素自动初始化为 0 但当局部数组定义时 没有用列表对其初始化 那么数组元素的值是不可预料的 在编程的时候要注意这个问题 下面贴出测试代码 includestdio hint

    2026年3月19日
    3
  • 藏师傅教你如何用即梦数字人 1.5

    藏师傅教你如何用即梦数字人 1.5

    2026年3月12日
    3

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号