练习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

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

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

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • .net AutoEventWireup介绍

    .net AutoEventWireup介绍ASP.NET页会引发诸如Init、Load、PreRender等生命周期事件。默认情况下,可以使用Page_事件名称的命名约定将页事件绑定到方法。例如,若要为页的Load事件创建处理程序,可以创建名为P…

  • 商城数据库表设计介绍怎么写_商城数据库设计

    商城数据库表设计介绍怎么写_商城数据库设计前言  一个商城系统,需要有,用户表,商品表,商品分类表,购物车表,订单表,订单明细表,支付信息表,以及物流信息表。  使用PowerDesigner对数据表以及他们之间的关系进行了粗略的设计得出了如下E-R图:  1.用户表2.商品表3.商品类别表4.购物车表5.订单表6.订单明细表7.支付信息表8.收货信息表SQL实例SETFOREIGN_KEY_CHECKS=0;———-…

  • thinkphp3.2如何自动生成后台模块并且怎么访问

    thinkphp3.2如何自动生成后台模块并且怎么访问

    2021年10月21日
  • Android 代码混淆配置总结[通俗易懂]

    Android 代码混淆配置总结[通俗易懂]一、前言为何需要混淆呢?简单的说,就是将原本正常的项目文件,对其类,方法,字段,重新命名,a,b,c,d,e,f…之类的字母,达到混淆代码的目的,这样反编译出来,结构乱糟糟的,看了也头大。另外说明

  • java.vm是什么文件(java)

    java获取vm运行参数TogetthenameofrunningVM(VirtualMachine)inJava,weusethegetProperties()method,whichisdefinedinSystemclass,whilecallingthemethod,weneedtopassthepropertynameto…

  • mysql 修改 表名 列名 为小写

    mysql 修改 表名 列名 为小写表名改为小写SELECTCONCAT(‘ALTERTABLE’,table_name,’RENAME’,LOWER(table_name),”;”)ASstatementFROMinformation_schema.TABLESWHEREtable_schema=’数据库’ANDtable_nameLIKE’表名%’;列名改为小写SELECTconcat(‘altertable’,TABLE_…

发表回复

您的电子邮箱地址不会被公开。

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