python网络库也有了基于协程的实现,比较著名的是 gevent、eventlet 它两之间的关系可以参照

Comparing gevent to eventlet, 本文主要简单介绍一下eventlet一个例子

客户端:

import eventlet
from eventlet.green import urllib2

def myfetch(myurl, i):
req = urllib2.Request(myurl)
req.add_header('User-agent', 'Mozilla 5.10')
res = urllib2.urlopen(req, timeout = 4)
body = res.read();
size = len(body);
print (i, 'body size ' ,size)
return size

myurl = "http://127.0.0.1:6000"
pool = eventlet.GreenPool(1000)
for i in range(1, 200):
pool.spawn(myfetch, myurl, i)
#print i
pool.waitall()
print "--finish --GreenPool"
服务端:

#! /usr/bin/env python
"""\
Simple server that listens on port 6000 and echos back every input to
the client. To try out the server, start it up by running this file.
Connect to it with:
telnet localhost 6000
You terminate your connection by terminating telnet (typically Ctrl-]
and then 'quit')
"""
from __future__ import print_function

import eventlet

def handle(fd): #单个协程的处理逻辑
print("client connected")
while True:
# pass through every non-eof line
x = fd.readline()
if not x:
break
fd.write(x)
fd.flush()
print("echoed", x, end=' ')
print("client disconnected")

print("server socket listening on port 6000")
server = eventlet.listen(('0.0.0.0', 6000)) #监听6000端口
pool = eventlet.GreenPool() #构造协程池
while True:
try:
new_sock, address = server.accept() #accept新的连接
print("accepted", address)
pool.spawn_n(handle, new_sock.makefile('rw')) #将新的连接交由一个新的协程去处理
except (SystemExit, KeyboardInterrupt):
break
上面的例子可以看出eventlet接口还是非常的简洁和优雅的,至于稳定性和成熟度还待真实的场景去验证,
使用eventlet快速开发一个tcp/http的server还是非常迅速的,因为是基于协程的, 对于网络IO密集型的场景
速度不会太差.
eventlet已知的在openstack项目中有使用.
---------------------
作者:mumumuwudi
来源:CSDN
原文:https://blog.csdn.net/mumumuwudi/article/details/47116493
版权声明:本文为博主原创文章,转载请附上博文链接!

转载于:https://www.cnblogs.com/ExMan/p/10426790.html

python基于协程的网络库gevent、eventlet相关推荐

  1. python模块介绍-gevent介绍:基于协程的网络库

    2019独角兽企业重金招聘Python工程师标准>>> python模块介绍-gevent介绍:基于协程的网络库 介绍 gevent是基于协程的Python网络库.特点: 基于lib ...

  2. kotlin 用协程做网络请求_Android使用Kotlin协程封装网络库

    概述 最近又要替换网络库成了,导致所有的业务代码都要替换且要重新测试回归.为了防止后续再遇到这样事情,降低替换核心库的成本,现利用协程对网络库进行封装. 理想API调用方式 launch { val ...

  3. Python 的协程库 greenlet 和 gevent

    greenlet 官方文档:https://greenlet.readthedocs.io/en/latest/ From:https://www.jianshu.com/u/3ab212f28d91 ...

  4. 学习笔记(35):Python网络编程并发编程-协程(yield,greenlet,gevent模块)

    立即学习:https://edu.csdn.net/course/play/24458/296457?utm_source=blogtoedu 协程(yield,greenlet,gevent) 1. ...

  5. python gevent async_详解python之协程gevent模块

    进程.线程.协程区分 我们通常所说的协程Coroutine其实是corporate routine的缩写,直接翻译为协同的例程,一般我们都简称为协程. 在linux系统中,线程就是轻量级的进程,而我们 ...

  6. python异步爬虫_Python实现基于协程的异步爬虫

    Python实现基于协程的异步爬虫 一.课程介绍 1. 课程来源 本课程核心部分来自<500 lines or less>项目,作者是来自 MongoDB 的工程师 A. Jesse Ji ...

  7. 基于协程的并发框架orchid简介

    2019独角兽企业重金招聘Python工程师标准>>> orchid简介 什么是orchid? orchid是一个构建于boost库基础上的C++库,类似于python下的geven ...

  8. python之协程与IO操作

    协程 协程,又称微线程,纤程.英文名Coroutine. 协程的概念很早就提出来了,但直到最近几年才在某些语言(如Lua)中得到广泛应用. 子程序,或者称为函数,在所有语言中都是层级调用,比如A调用B ...

  9. 一个使用 asyncio 协程的网络爬虫(一)

    2019独角兽企业重金招聘Python工程师标准>>> 导读 A. Jesse Jiryu Davis 是纽约 MongoDB 的工程师.他编写了异步 MongoDB Python ...

  10. python3异步协程爬虫_Python实现基于协程的异步爬虫

    Python实现基于协程的异步爬虫 一.课程介绍 1. 课程来源 本课程核心部分来自<500 lines or less>项目,作者是来自 MongoDB 的工程师 A. Jesse Ji ...

最新文章

  1. $.post把表单对象传递过去_第二章 第三节 Request请求对象详解
  2. 详解spark任务提交至yarn的集群和客户端模式
  3. zookeeper的安装及配置教程(步骤详尽)
  4. Django常用命令总结(图片)
  5. 使用 Pandas GUI 进行数据探索
  6. c语言程序中的错误可分为,《C语言程序设计(本)》模拟试卷1.doc
  7. LINUX安装ORACLE 9204 报错解决!!
  8. 从零开始开发 VS Code 插件之 Translator Helper
  9. 进入保护模式(三)内存的分页
  10. mysql获取逻辑日志_Mysql 逻辑架构图及日志系统
  11. NB-IoT---(0) NB-IoT技术
  12. 计算机网络重点知识总结 谢希仁版,计算机网络谢希仁版网络层知识点总结
  13. Python基础学习5 -字符串
  14. 谷歌高频面试题-较小的三数之和
  15. ad17 linux 版本,Altium Designer这些不同版本的软件之间的区别有多大呢?
  16. 前端导入并解析excel文件,前端解析xlsx、xls格式文件、VUE解析xlsx、xls格式文件
  17. Newton Interpolation
  18. 硬件信息查看PHP,如何查看电脑硬件信息|查看电脑硬件信息软件 查看电脑CPU/显卡/内存条/主板型号等配置...
  19. Matlab中int2str函数使用
  20. 安卓学习日记——画布与绘制

热门文章

  1. 洛谷 1449——后缀表达式(线性数据结构)
  2. 你一直在用的Beam Search,是否真的有效?
  3. 【论文】赛尔原创 | EMNLP 2019基于知识库检索器的实体一致性端到端任务型对话系统...
  4. 20200221_2_国家非文化遗产爬虫代码
  5. 想来字节跳动和我做同事吗?抓紧这次机会吧~
  6. poj3268(Silver Cow Party)最短路
  7. python—将自定义函数的路径添加到系统路径中
  8. python——迭代器itertools.cycle
  9. 机器学习入门——numpy与matplotlib的使用简介
  10. Linux:为什么性能工具需要 BPF 技术