本文以实例分析了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模块用法实例教程相关推荐

  1. python argparse模块详解_python学习之argparse模块

    一.介绍 argparse是python用于解析命令行参数和选项的标准模块,用于代替已经过时的optparse模块.argparse模块的作用是用于解析命令行参数. 我们很多时候,需要用到解析命令行参 ...

  2. pythonjam教程_Python学习:安装配置pycharm编辑器教程

    我只介绍windows的安装过程. 1. windows安装过程 1.1 下载安装包 下载地址为 https://www.jetbrains.com/pycharm/download/#section ...

  3. 2019最新Python学习教程(Python视频教程_Python学习教程_Python学习路线):你心目中编程界的MVP是谁?

    2019最新Python学习教程(Python视频教程_Python学习教程_Python学习路线):你心目中编程界的MVP是谁?编程界的王者是渐落寞的Java还是大火的Python? 是不是你们也喜 ...

  4. YDOOK: USB 转 TTL 模块 与 ESP8266 WiFi 串口通讯实验 连线实例教程

    YDOOK: USB 转 TTL 模块 与 ESP8266 WiFi 串口通讯实验 连线实例教程 © YDOOK JY Lin 文章目录 YDOOK: USB 转 TTL 模块 与 ESP8266 W ...

  5. 我学python前一句_Python学习教程:人生苦短,我用Python?入门前你要知道这些

    有多少伙伴是因为一句'人生苦短,我用Python'就要去学Python的?之前也大家更新过Python学习教程普及过多次的Python相关知识,不过大家还是还得计划一下Python学习路线!Pytho ...

  6. python常用开放工具_python学习笔记16-各种模块和开放工具收集整理

    一.调试,性能,日志 Debugger: pdb Logger: logging Profilers: profile, hotshot, cProfile 调试模块 pdb 允许你设置(条件)断点, ...

  7. python编程16章教程_Python学习笔记__16.2章 TCP编程

    # 这是学习廖雪峰老师python教程的学习笔记 Socket是网络编程的一个抽象概念.通常我们用一个Socket表示"打开了一个网络链接",而打开一个Socket需要知道目标计算 ...

  8. pythoncad标注教程_Python学习笔记(4)——Matplotlib中的annotate(注解)的用法

    在上一篇博文ID3决策树算法中,绘制决策树时,使用了Matplotlib的注解工具annotate,借此机会系统学习一下annotate的用法. annotate用于在图形上给数据添加文本注解,而且支 ...

  9. python我想对你说_python学习22天----模块、包

    1.from ...import  xxx 例: frommy_moudle importlogin 1)from import 的时候发生了什么 ①先找到my_moudle模块 ②开辟一块属于这个模 ...

最新文章

  1. swift3.0最新拨打电话方法
  2. map和foreach的区别和应用场景_浅析项目中常用的 VO、DTO、DO、PO的概念、区别和用处...
  3. 关于idea plugin测试那些事(纯手工翻译,只为打发时间,如果有错误,欢迎提建议,如果有意见,我相信别家一定更适合你)
  4. python快速上手下载_初学者如何尽快上手python
  5. 【Python基础】科学计算库Scipy简易入门
  6. AIoT让一个屏有了100种用法
  7. Ajax全接触(1)
  8. 限免!百名 AI 大咖,20 大技术和行业论坛,邀你加入群聊
  9. undefined symbol: PyFPE_jbuf
  10. 【关系抽取】从文本中进行关系抽取的几种不同的方法
  11. Sessions and Processes
  12. 【Unity】EasyTouch5触屏检测
  13. Vuejs——(4)v-if、v-for
  14. 智驾科技MAXIEYE完成3亿元B轮融资,暂未取得品牌同名商标
  15. 半实物仿真技术在复杂控制系统研发过程中的典型应用
  16. DBA的职场生涯应如何选择?
  17. Python 中的对象赋值、浅拷贝和深拷贝
  18. 爱普生Epson WorkForce WF-7725 一体机驱动
  19. AB实验只是开始!如何归因才是王道!
  20. 移动端上传头像-相册、拍摄-旋转

热门文章

  1. 终端卡顿优化的全记录
  2. 一种通用整形数组压缩方法
  3. 说一说阿里云弹性公网IP那些事
  4. 阿里云推出全新内存增强型实例re6,性能提升30%
  5. 因“智”而治,数据库自动驾驶时代大门即将开启!
  6. 直面PHP微服务架构挑战
  7. Tensorflow源码解析2 -- 前后端连接的桥梁 - Session 1
  8. 专访阿里云专有云马劲,一个理性的理想主义者
  9. 阿里巴巴研究员刘国华:阿里巴巴智能运维体系建设
  10. Tensorflow快餐教程(1) - 30行代码搞定手写识别