python模块用法教程_Python学习之asyncore模块用法实例教程
本文以实例分析了Python中asyncore模块的原理及用法,分享给大家供大家参考。具体分析如下:
asyncore库是python的一个标准库,它是一个异步socket的包装。我们操作网络的时候可以直接使用socket等底层的库,但是asyncore使得我们可以更加方便的操作网络,避免直接使用socket,select,poll等工具时需要面对的复杂。
这个库很简单,包含了一个函数和一个类
* loop()函数
* dispatcher基类
需要注意的是,loop函数是全局的,不是dispatcher的方法
每一个从dispatcher继承的类的对象,都可以看作我们需要处理的一个socket,可以是TCP连接或者UDP,甚至是其它不常用的。使用容易,我们需要定义一个类,它继承dispatcher,然后我们重写(覆盖)一些方法就可以了。
我们需要重写的方法一般都以handle_打头。
class refuse(dispatcher):
def handle_accept():
#do nothing ...
pass
loop()函数负责检测一个dict,dict中保存dispatcher的实例,这个字典被称为channel。每次创建一个dispatcher对象,都会把自己加入到一个默认的dict里面去(当然也可以自己指定channel)。当对象被加入到channel中的时候,socket的行为都已经被定义好,程序只需要调用loop(),一切功能就实现了。
asyncore是python标准库中的一个良好的设计
在python的标准文档中,有一个asyncore的例子
import asyncore, socket
class http_client(asyncore.dispatcher):
def __init__(self, host, path):
asyncore.dispatcher.__init__(self)
self.create_socket(socket.AF_INET, socket.SOCK_STREAM)
self.connect( (host, 80) )
self.buffer = 'GET %s HTTP/1.0rnrn' % path
def handle_connect(self):
pass
def handle_close(self):
self.close()
def handle_read(self):
print self.recv(8192)
def writable(self):
return (len(self.buffer) > 0)
def handle_write(self):
sent = self.send(self.buffer)
self.buffer = self.buffer[sent:]c = http_client('www.python.org', '/')
asyncore.loop()
运行这个函数,发现python.org的首页被下载下来了,也就是说我们实现了一个http层的协议?但是我们用的仅仅是socket级别的API…那么来看看这几行代码的奥妙吧!
writable和readable在检测到一个socket可以写入或者检测到数据到达的时候,被调用,并返回一个bool来决定是否handle_read或者handle_write
打开asyncore.py可以看到,dispatcher类中定义的方法writable和readable的定义相当的简单:
def readable(self):
return True
def writable(self):
return True
就是说,一旦检测到可读或可写,就直接调用handle_read/handle_write,但是在上面的例子中,我们却看到了一个重载(看上去像C++的虚函数,不是吗?)
python模块用法教程_Python学习之asyncore模块用法实例教程相关推荐
- python argparse模块详解_python学习之argparse模块
一.介绍 argparse是python用于解析命令行参数和选项的标准模块,用于代替已经过时的optparse模块.argparse模块的作用是用于解析命令行参数. 我们很多时候,需要用到解析命令行参 ...
- pythonjam教程_Python学习:安装配置pycharm编辑器教程
我只介绍windows的安装过程. 1. windows安装过程 1.1 下载安装包 下载地址为 https://www.jetbrains.com/pycharm/download/#section ...
- 2019最新Python学习教程(Python视频教程_Python学习教程_Python学习路线):你心目中编程界的MVP是谁?
2019最新Python学习教程(Python视频教程_Python学习教程_Python学习路线):你心目中编程界的MVP是谁?编程界的王者是渐落寞的Java还是大火的Python? 是不是你们也喜 ...
- YDOOK: USB 转 TTL 模块 与 ESP8266 WiFi 串口通讯实验 连线实例教程
YDOOK: USB 转 TTL 模块 与 ESP8266 WiFi 串口通讯实验 连线实例教程 © YDOOK JY Lin 文章目录 YDOOK: USB 转 TTL 模块 与 ESP8266 W ...
- 我学python前一句_Python学习教程:人生苦短,我用Python?入门前你要知道这些
有多少伙伴是因为一句'人生苦短,我用Python'就要去学Python的?之前也大家更新过Python学习教程普及过多次的Python相关知识,不过大家还是还得计划一下Python学习路线!Pytho ...
- python常用开放工具_python学习笔记16-各种模块和开放工具收集整理
一.调试,性能,日志 Debugger: pdb Logger: logging Profilers: profile, hotshot, cProfile 调试模块 pdb 允许你设置(条件)断点, ...
- python编程16章教程_Python学习笔记__16.2章 TCP编程
# 这是学习廖雪峰老师python教程的学习笔记 Socket是网络编程的一个抽象概念.通常我们用一个Socket表示"打开了一个网络链接",而打开一个Socket需要知道目标计算 ...
- pythoncad标注教程_Python学习笔记(4)——Matplotlib中的annotate(注解)的用法
在上一篇博文ID3决策树算法中,绘制决策树时,使用了Matplotlib的注解工具annotate,借此机会系统学习一下annotate的用法. annotate用于在图形上给数据添加文本注解,而且支 ...
- python我想对你说_python学习22天----模块、包
1.from ...import xxx 例: frommy_moudle importlogin 1)from import 的时候发生了什么 ①先找到my_moudle模块 ②开辟一块属于这个模 ...
最新文章
- swift3.0最新拨打电话方法
- map和foreach的区别和应用场景_浅析项目中常用的 VO、DTO、DO、PO的概念、区别和用处...
- 关于idea plugin测试那些事(纯手工翻译,只为打发时间,如果有错误,欢迎提建议,如果有意见,我相信别家一定更适合你)
- python快速上手下载_初学者如何尽快上手python
- 【Python基础】科学计算库Scipy简易入门
- AIoT让一个屏有了100种用法
- Ajax全接触(1)
- 限免!百名 AI 大咖,20 大技术和行业论坛,邀你加入群聊
- undefined symbol: PyFPE_jbuf
- 【关系抽取】从文本中进行关系抽取的几种不同的方法
- Sessions and Processes
- 【Unity】EasyTouch5触屏检测
- Vuejs——(4)v-if、v-for
- 智驾科技MAXIEYE完成3亿元B轮融资,暂未取得品牌同名商标
- 半实物仿真技术在复杂控制系统研发过程中的典型应用
- DBA的职场生涯应如何选择?
- Python 中的对象赋值、浅拷贝和深拷贝
- 爱普生Epson WorkForce WF-7725 一体机驱动
- AB实验只是开始!如何归因才是王道!
- 移动端上传头像-相册、拍摄-旋转