- 浏览: 2663536 次
- 来自: 杭州
文章分类
- 全部博客 (1188)
- webwork (4)
- 网摘 (18)
- java (103)
- hibernate (1)
- Linux (85)
- 职业发展 (1)
- activeMQ (2)
- netty (14)
- svn (1)
- webx3 (12)
- mysql (81)
- css (1)
- HTML (6)
- apache (3)
- 测试 (2)
- javascript (1)
- 储存 (1)
- jvm (5)
- code (13)
- 多线程 (12)
- Spring (18)
- webxs (2)
- python (119)
- duitang (0)
- mongo (3)
- nosql (4)
- tomcat (4)
- memcached (20)
- 算法 (28)
- django (28)
- shell (1)
- 工作总结 (5)
- solr (42)
- beansdb (6)
- nginx (3)
- 性能 (30)
- 数据推荐 (1)
- maven (8)
- tonado (1)
- uwsgi (5)
- hessian (4)
- ibatis (3)
- Security (2)
- HTPP (1)
- gevent (6)
- 读书笔记 (1)
- Maxent (2)
- mogo (0)
- thread (3)
- 架构 (5)
- NIO (5)
- 正则 (1)
- lucene (5)
- feed (4)
- redis (17)
- TCP (6)
- test (0)
- python,code (1)
- PIL (3)
- guava (2)
- jython (4)
- httpclient (2)
- cache (3)
- signal (1)
- dubbo (7)
- HTTP (4)
- json (3)
- java socket (1)
- io (2)
- socket (22)
- hash (2)
- Cassandra (1)
- 分布式文件系统 (5)
- Dynamo (2)
- gc (8)
- scp (1)
- rsync (1)
- mecached (0)
- mongoDB (29)
- Thrift (1)
- scribe (2)
- 服务化 (3)
- 问题 (83)
- mat (1)
- classloader (2)
- javaBean (1)
- 文档集合 (27)
- 消息队列 (3)
- nginx,文档集合 (1)
- dboss (12)
- libevent (1)
- 读书 (0)
- 数学 (3)
- 流程 (0)
- HBase (34)
- 自动化测试 (1)
- ubuntu (2)
- 并发 (1)
- sping (1)
- 图形 (1)
- freemarker (1)
- jdbc (3)
- dbcp (0)
- sharding (1)
- 性能测试 (1)
- 设计模式 (2)
- unicode (1)
- OceanBase (3)
- jmagick (1)
- gunicorn (1)
- url (1)
- form (1)
- 安全 (2)
- nlp (8)
- libmemcached (1)
- 规则引擎 (1)
- awk (2)
- 服务器 (1)
- snmpd (1)
- btrace (1)
- 代码 (1)
- cygwin (1)
- mahout (3)
- 电子书 (1)
- 机器学习 (5)
- 数据挖掘 (1)
- nltk (6)
- pool (1)
- log4j (2)
- 总结 (11)
- c++ (1)
- java源代码 (1)
- ocr (1)
- 基础算法 (3)
- SA (1)
- 笔记 (1)
- ml (4)
- zokeeper (0)
- jms (1)
- zookeeper (5)
- zkclient (1)
- hadoop (13)
- mq (2)
- git (9)
- 问题,io (1)
- storm (11)
- zk (1)
- 性能优化 (2)
- example (1)
- tmux (1)
- 环境 (2)
- kyro (1)
- 日志系统 (3)
- hdfs (2)
- python_socket (2)
- date (2)
- elasticsearch (1)
- jetty (1)
- 树 (1)
- 汽车 (1)
- mdrill (1)
- 车 (1)
- 日志 (1)
- web (1)
- 编译原理 (1)
- 信息检索 (1)
- 性能,linux (1)
- spam (1)
- 序列化 (1)
- fabric (2)
- guice (1)
- disruptor (1)
- executor (1)
- logback (2)
- 开源 (1)
- 设计 (1)
- 监控 (3)
- english (1)
- 问题记录 (1)
- Bitmap (1)
- 云计算 (1)
- 问题排查 (1)
- highchat (1)
- mac (3)
- docker (1)
- jdk (1)
- 表达式 (1)
- 网络 (1)
- 时间管理 (1)
- 时间序列 (1)
- OLAP (1)
- Big Table (0)
- sql (1)
- kafka (1)
- md5 (1)
- springboot (1)
- spring security (1)
- Spring Boot (3)
- mybatis (1)
- java8 (1)
- 分布式事务 (1)
- 限流 (1)
- Shadowsocks (0)
- 2018 (1)
- 服务治理 (1)
- 设计原则 (1)
- log (0)
- perftools (1)
最新评论
-
siphlina:
课程——基于Python数据分析与机器学习案例实战教程分享网盘 ...
Python机器学习库 -
san_yun:
leibnitz 写道hi,我想知道,无论在92还是94版本, ...
hbase的行锁与多版本并发控制(MVCC) -
leibnitz:
hi,我想知道,无论在92还是94版本,更新时(如Puts)都 ...
hbase的行锁与多版本并发控制(MVCC) -
107x:
不错,谢谢!
Latent Semantic Analysis(LSA/ LSI)算法简介 -
107x:
不错,谢谢!
Python机器学习库
话说gevent也没个logo啥的,于是就摆了这张图= =|||,首先这是一种叫做greenlet的鸟,而在python里,按照官方解释greenlet是轻量级的并行编程,而gevent呢,就是利用 greenlet实现的基于协程的python的网络library,好了,关系理清了。。。
话 说pycon没有白去阿,了解了很多以前不知道的东西,比如说协程,gevent,greenlet,eventlet。说说协程,进程和线程大家平时了 解的都比较多,而协程算是一种轻量级进程,但又不能叫进程,因为操作系统并不知道它的存在。什么意思呢,就是说,协程像是一种在程序级别来模拟系统级别的 进程,由于是单进程,并且少了上下文切换,于是相对来说系统消耗很少,而且网上的各种测试也表明,协程确实拥有惊人的速度。并且在实现过程中,协程可以用 以前同步思路的写法,而运行起来确是异步的,也确实很有意思。话说有一种说法就是说进化历程是多进程->多线程->异步->协程,暂且 不论说的对不对,单从诸多赞誉来看,协程还是有必要理解一下的。
比较惭愧,greenlet没怎么看就直接看gevent,官方文档 还是可以看看的,尤其是源码里的examples都相当不错,有助于理解gevent的使用。
gevent封装了很多很方便的接口,其中一个就是monkey
-
from gevent import monkey
-
monkey.patch_all ( )
这样两行,就可以使用python以前的socket之类的,因为gevent已经给你自动转化了,真是超级方便阿。
而且安装gevent也是很方便,首先安装依赖libevent和greenlet,再利用pypi安装即可
-
sudo apt-get install libevent-dev
-
sudo apt-get install python-dev
-
sudo easy-install gevent
然后,gevent中的event,有wait,set等api,方便你可以让某些协程在某些地方等待条件,然后用另一个去唤醒他们。
再就是gevent实现了wsgi可以很方便的当作python的web server服务器使。
最后放送一个我利用gevent实现的一个带有缓存的dns server
# -*- coding: UTF-8 -*- import gevent import dnslib from gevent import socket from gevent import event rev=socket.socket(socket.AF_INET,socket.SOCK_DGRAM) rev.bind(('',53)) ip=[] cur=0 def preload(): for i in open('ip'): ip.append(i) print "load "+str(len(ip))+" ip" def send_request(data): global cur ret=rev.sendto(data,(ip[cur],53)) cur=(cur+1)%len(ip) class Cache: def __init__(self): self.c={} def get(self,key): return self.c.get(key,None) def set(self,key,value): self.c[key]=value def remove(self,key): self.c.pop(key,None) cache=Cache() def handle_request(s,data,addr): req=dnslib.DNSRecord.parse(data) qname=str(req.q.qname) qid=req.header.id ret=cache.get(qname) if ret: ret=dnslib.DNSRecord.parse(ret) ret.header.id=qid; s.sendto(ret.pack(),addr) else: e=event.Event() cache.set(qname+"e",e) send_request(data) e.wait(60) tmp=cache.get(qname) if tmp: tmp=dnslib.DNSRecord.parse(tmp) tmp.header.id=qid; s.sendto(tmp.pack(),addr) def handle_response(data): req=dnslib.DNSRecord.parse(data) qname=str(req.q.qname) print qname cache.set(qname,data) e=cache.get(qname+"e") cache.remove(qname+"e") if e: e.set() e.clear() def handler(s,data,addr): req=dnslib.DNSRecord.parse(data) if req.header.qr: handle_response(data) else:handle_request(s,data,addr) def main(): preload() while True: data,addr=rev.recvfrom(8192) gevent.spawn(handler,rev,data,addr) if __name__ == '__main__': main()
参考:http://www.isnowfy.com/introduction-to-gevent/
发表评论
-
python读取图片exif信息
2014-11-06 10:53 2407f = open("/home/admin/tlo ... -
Python程序的执行原理
2014-04-14 15:44 17331. 过程概述 Python先把代码(.py文件)编译成字 ... -
如何创建一个短链服务
2013-12-26 16:23 0参考: http://stackoverflow.com ... -
python 解析命令参数(argument)组件argparse
2013-12-11 17:35 1410参考: http://youngsterxyf.githu ... -
pyhon命令行工具optparse
2013-11-10 16:27 1045使用python optparse 可以创建命令行工具,下面 ... -
Python在豆瓣的应用
2013-10-21 10:46 1202Python在豆瓣的应用,hongqiangning分享 ... -
用python爬虫抓站的一些技巧总结
2013-10-10 14:12 1686学用python也有3个多月了,用得最多的还是各类爬虫 ... -
python小技巧
2013-10-10 11:50 7481. 声明长度256的数组 a=[0]*256 ... -
使用tesseract-ocr破解网站验证码
2013-10-09 10:25 1215原文:使用tesseract-ocr破解网站验证码 ... -
和豆瓣CMGS交流
2013-06-20 17:36 5849蒋云鹏: 在?CMGS: 在蒋 ... -
python乱码问题('ascii' codec can't encode character u'\u4e2d' in position 0)
2013-05-20 19:03 4258>>> k = u'中' >> ... -
python shell 交互模式
2013-04-28 22:17 1643python 通过code模块可以很容易的进入交互模式: ... -
jython和gunicorn性能测试对比
2013-04-13 13:03 1313helloworld,笔记本上: gunicorn ... -
python的mysql客户端-MySQLdb
2013-04-04 10:13 1176平时的主要编程语言是Java,开发时也主要用Mysql,经常 ... -
gevent 方法测试 文档集合
2013-03-18 22:12 11821. gevent中线程是什么?之前以为会一直增加, ... -
Python几种并发实现方案的性能比较
2013-03-18 21:14 2970原文:http://www.elias.cn/P ... -
python汉字和Unicode码(utf-8)之间的转换(Pack/Unpack)
2013-03-18 21:13 1654保证你要转换的字符串编码为UTF8,如果不是,请iconv ... -
python反序列化的坑
2013-01-06 18:06 1285今天遇到python一个坑,调用memcached的get_m ... -
sqlalchemy connection pool.py 源代码
2012-12-29 22:58 2254把 sqlalchemy pool源代码copy下来,有空看看 ... -
SQLAlchemy简单介绍
2012-12-28 22:41 0文档参考:http://docs.sqlalchemy.org ...
相关推荐
知识点:gevent库在Python中的应用与优势 一、gevent简介 gevent是一个Python库,专注于异步编程,提供了一种高效的并发解决方案。它基于greenlet(一种轻量级的协程)和libevent(事件驱动网络I/O库)构建,能够...
标题中提到的“Gevent指南”指明了本文件是关于Gevent库的一个使用指南。Gevent是一个基于libev的Python并发库,它让程序员能够以更简洁的方式处理并发和网络相关任务。它提供的API使得并发编程对Python开发者更加...
《Python中的Gevent:协程实现与应用》 在Python编程中,Gevent是一个高效的并发库,它基于Greenlet,并且提供了对协程的支持。本文将深入探讨Gevent的安装、工作原理以及如何在实际项目中应用协程。 1. **Gevent...
### Python Gevent程序员指南知识点概览 #### 一、Gevent简介 - **定义**:Gevent 是一个基于 libev 的并发库,为 Python 提供了一个简洁高效的 API 来处理并发和网络相关的任务。 - **目标用户**:本书面向具备...
标题“python gevent==21.8.0”指的是Python中的Gevent库的一个特定版本,即21.8.0。这个版本可能包含了性能优化、新功能或对旧有功能的改进。 Gevent是一个基于libev事件库的Python库,它实现了协程(coroutines)...
**模块gevent详解** `gevent`是一款基于Python的并发库,它利用了协同多任务(cooperative multitasking)的概念,让开发者能够以简洁、高效的方式处理并发问题。`gevent`的核心是其绿色线程(greenlet),这是一种...
在windows下安装gevent的安装包,安装方法很简单。具体参考我在csdn的博客。 http://blog.csdn.net/ruguokeyi110/article/details/47725545
标题中的"gevent-21.12.0-cp39-cp39-win_amd64.whl.zip"指示了这是一个与Python相关的库,名为`gevent`,版本号为21.12.0,适用于Python 3.9版本,并且是专为Windows x64(AMD64)架构编译的。`.whl`文件是Python的...
**gevent 1.0.2 知识点详解** `gevent` 是一个非常流行的Python库,专为网络编程和并发操作设计。它利用了`greenlet`库,将线程模型转换为轻量级的协程模型,极大地提高了性能和效率。`gevent 1.0.2`是该库的一个...
gevent 1.0 for win32 python 2.7
其中,`gevent`库作为一个强大的工具,为开发者提供了基于协程的并发模型,使得编写高性能、高并发的网络应用变得更为简单。本文将深入探讨`gevent` 0.13.8版本的特性和使用方法。 `gevent` 是一个基于`libev`事件...
标题 "gevent-21.12.0-cp37-cp37m-win_amd64.whl.zip" 暗示我们正在处理一个与 gevent 相关的 Python 库的安装包,该包是为 Python 3.7(cp37)编译的,并且适用于 Windows 操作系统上的 AMD64(64位)架构。gevent ...
Gevent是一个基于libev事件循环库的Python并发库,由Gevent社区维护。它允许程序员使用Python原生的同步API来编写异步代码,并且能够轻易地处理大量并发连接,特别适合I/O密集型的网络应用。Gevent的API设计简洁,...
本文将深入探讨`gevent`这一强大的Python异步I/O库,以及如何通过提供的`gevent-1.4.0-cp35-cp35m-win_amd64.whl`文件在Windows 64位环境下进行安装。`gevent`是一个基于greenlet的事件驱动网络库,它能够高效地处理...
在Python的世界里,`pip`是默认的包管理器,用于安装和管理各种第三方库,如`gevent`。`gevent`是一个基于greenlet的库,它提供了一种高效的并发模型,特别适合于网络I/O密集型应用,如网络爬虫。 首先,让我们深入...
《深入理解Gevent:Python并发框架的奥秘》 Gevent,这个名词在Python的世界里,无疑是一个引人注目的存在。它是一个基于greenlet的并发框架,旨在为Python开发者提供一套简单、高效的异步I/O处理方案。本文将深入...
本文档是非常详尽的gevent学习教程,可以使你更深入的了解python的gevent
gevent 1.0rc2 for windows
python协程gevent编写的异步web服务器,由python和第三方包gevent,socket编写
gevent-zeromq, pyzeromq gevent compat lib deprecate !这项工作已经合并到了 pyzmq gevent客户端这个库包装 pyzmq,使它与gevent兼容。 要求pyzmq==2.2.0gevent ( 与 1.0个pre发行版兼容)用法要直接