Python学习之asyncore模块用法实例教程

Python学习之asyncore模块用法实例教程

2023年7月15日发(作者:)

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 ... passloop()函数负责检测⼀个dict,dict中保存dispatcher的实例,这个字典被称为channel。每次创建⼀个dispatcher对象,都会把⾃⼰加⼊到⼀个默认的dict⾥⾯去(当然也可以⾃⼰指定channel)。当对象被加⼊到channel中的时候,socket的⾏为都已经被定义好,程序只需要调⽤loop(),⼀切功能就实现了。asyncore是python标准库中的⼀个良好的设计在python的标准⽂档中,有⼀个asyncore的例⼦import asyncore, socketclass http_client(cher): def __init__(self, host, path): cher.__init__(self) _socket(_INET, _STREAM) t( (host, 80) ) = 'GET %s HTTP/1.0rnrn' % path def handle_connect(self): pass def handle_close(self): () def handle_read(self): print (8192) def writable(self): return (len() > 0) def handle_write(self): sent = () = [sent:]c = http_client('', '/')()运⾏这个函数,发现的⾸页被下载下来了,也就是说我们实现了⼀个http层的协议?但是我们⽤的仅仅是socket级别的API…那么来看看这⼏⾏代码的奥妙吧!writable和readable在检测到⼀个socket可以写⼊或者检测到数据到达的时候,被调⽤,并返回⼀个bool来决定是否handle_read或者handle_write打开可以看到,dispatcher类中定义的⽅法writable和readable的定义相当的简单:def readable(self): return Truedef writable(self): return True就是说,⼀旦检测到可读或可写,就直接调⽤handle_read/handle_write,但是在上⾯的例⼦中,我们却看到了⼀个重载(看上去像C++的虚函数,不是吗?)def writable(self): return (len() > 0)很明显,当我们有数据需要发送的时候,我们才给writable的调⽤者返回⼀个True,这样就不需要在handle_write中再做判断了,逻辑很明确,代码很清晰,美中不⾜的是理解需要⼀点时间,但是不算困难吧!其余的代码看起来就很清晰了,有⼀种兵来将挡的感觉。当⼀个http服务器发送处理完成你的请求,close socket的时候,我们的handle_close()也相应完成⾃⼰的使命。close()将对象⾃⾝从channel中删除,并且负责销毁socket对象。def close(self): _channel() ()loop()函数检测到⼀个空的channel,将退出循环,程序完成任务,exit。希望本⽂所述对⼤家的Python程序设计有所帮助。

发布者:admin,转转请注明出处:http://www.yc00.com/web/1689408503a243295.html

相关推荐

发表回复

评论列表(0条)

  • 暂无评论

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信