iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > Python >python中的asyncore
  • 904
分享到

python中的asyncore

pythonasyncore 2023-01-31 06:01:55 904人浏览 独家记忆

Python 官方文档:入门教程 => 点击学习

摘要

在python中,既可直接使用Socket类,也可使用socketserver,asyncore等经过封装的类来进行编码。asyncore这个库中主要包含了两个函数:asyncore.loop([timeout[, use_poll[, m

python中,既可直接使用Socket类,也可使用socketserver,asyncore等经过封装的类来进行编码。asyncore这个库中主要包含了两个函数:

  • asyncore.loop([timeout[, use_poll[, map[, count]]]])

  • class asyncore.dispatcher

Eventdescription
handle_connect()Implied by the first read or write event
handle_close()Implied by a read event with no data available
handle_accepted()Implied by a read event on a listening socket

该模块是事件驱动的,loop()函数用于循环监听网络事件,dispatcher相当于一个socket对象,用于网络事件交互。loop()函数负责检测一个dict,dict中保存dispatcher的实例,这个字典被称为channel。每次创建一个dispatcher对象,都会把自己加入到一个默认的dict里面去(当然也可以自己指定channel)。当对象被加入到channel中的时候,socket的行为都已经被定义好,程序只需要调用loop(),一切功能就实现了。

我们定义一个类,它继承dispatcher类,然后我们重写基类的方法。每个继承dispatcher类的对象,都可以看做我们需要处理的一个socket,可以tcp也可以是UDP,甚至是一些不常用的。

这是标准文档中的一个例子。

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 = bytes('GET %s HTTP/1.0\r\nHost: %s\r\n\r\n' %
                            (path, host), 'ascii')
    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()

dispatcher类中的writable和readable在检测到一个socket可以写入或者数据到达的时候被调用,并返回一个bool值,决定是否调用handle_read或者handle_write。打开asyncore.py可以看到,dispatcher类中定义的方法writable和readable的定义相当的简单:


def readable(self):
    return True
def writable()
    return True

也就是说,一旦检测到可读或可写,就调用handle_read/handle_write,但在这个例子中重写了父类的writable方法,

def writable(self):
        return (len(self.buffer) > 0)

很明显,当我们有数据需要发送的时候,我们才给writable的调用者返回一个True,这样就不需要在handle_write中再做判断了,逻辑很明确,代码很清晰,美中不足的是理解需要一点时间,但是不算困难吧!

其余的代码看起来就很清晰了,当一个http服务器发送处理完成你的请求,close socket的时候,我们的handle_close()也相应完成自己的使命。close()将对象自身从channel中删除,并且负责销毁socket对象。

def close(self):
    self.del_channel()
    self.socket.close()

loop()函数检测到一个空的channel,将退出循环,程序完成任务,exit。

--结束END--

本文标题: python中的asyncore

本文链接: https://www.lsjlt.com/news/190505.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • python中的asyncore
    在Python中,既可直接使用socket类,也可使用socketserver,asyncore等经过封装的类来进行编码。asyncore这个库中主要包含了两个函数:asyncore.loop([timeout[, use_poll[, m...
    99+
    2023-01-31
    python asyncore
  • python中asyncore异步模块的实现
    目录模块常见方法asyncore 实例asyncore即是一个异步的socket封装,特别是dispatcher类中包含了很多异步调用的socket操作方法。 模块常见方法 这个模块...
    99+
    2023-01-18
    python asyncore异步模块 python asyncore异步
  • Python asyncore socket客户端开发基本使用教程
    目录介绍1.定义类并且继承 asyncore.dispatcher2.实现类中的回调代码调用父类方法创建 socket 对象连接服务器3.创建对象并且执行 asyncore.loop...
    99+
    2022-12-26
    Python asyncore socket使用 Python asyncore socket Python asyncore 
  • [Python ] python中文件的
    原文地址: http://blog.163.com/qimeizhen8808@126/ 这女孩写的挺好,有值得学习的地方。   1) 文件的打开和创建,关闭  a)文件的打开和创建 主要有两个open()和file()两个方法。它们的功能...
    99+
    2023-01-31
    文件 Python python
  • python中的whitespace
    python中strip()和split()在无参数的情况下使用whitespace做为默认参数,在帮助文档中对whitespace的解释为6个字符,它们是space, tab, linefeed, return, formfeed, an...
    99+
    2023-01-31
    python whitespace
  • python中的&&及||
    首先说明一下,在python中是没有&&及||这两个运算符的,取而代之的是英文and和or。其他运算符没有变动。  接着重点要说明的是python中的a.any(),我之所以会涉及到这个函数,是因为我在设计某个分段数值函数...
    99+
    2023-01-31
    python
  • python中的input
    python中的input()方法是在控制台可以自己输入数据 比如 :定义变量a = 2 现在可以写成 a = input() 可以自己输入变量a的值 注意:input()返回的值是str字符型的 如果要让输入的数字变为整形,可以使用i...
    99+
    2023-01-31
    python input
  • python中的类
    关键字:class含义:带有某些属性和方法的一个集合,可以理解成模板。 object的概念:类的实例。以对应类为模板,创建出来的对象。 如何理解python中的self?1 实例本身,对象。2 可以理解为一个字典变量,内部存的就是对象的数据...
    99+
    2023-01-31
    python
  • python中的__enter__ __
    我们前面文章介绍了迭代器和可迭代对象,这次介绍python的上下文管理。在python中实现了__enter__和__exit__方法,即支持上下文管理器协议。上下文管理器就是支持上下文管理器协议的对象,它是为了with而生。当with语...
    99+
    2023-01-30
    python
  • Python中的bytes
    bytes_lst = [   ('创建bytes',),   ('bytes可哈希',),   ('编码与解码',),   ('常见编码类型',),   ('ord() 与 chr()',), ]   创建bytes   &g...
    99+
    2023-01-30
    Python bytes
  • Python中的defaultdict
    字典(dictionary)是Python中一种常用的数据类型。不同于其他由数字索引的序列,字典是用"键"(key)来索引的。通常表示为dict(key: val, ...),有以下特征: 键可以是任何不可变(immutable)数据类...
    99+
    2023-01-31
    Python defaultdict
  • python中的import
    python中的import操作有点类似于C语言中的#include,但又有很大的不同。在c语言中,#include是编译前将另一个文件包含进当前文件中。在python中导入并非只把一个文件文本插入另一个文件而已。导入其实是运行时的运算,程...
    99+
    2023-01-31
    python import
  • Python中的dict
    # dict # Python内置了字典:dict的支持,dict全称dictionary,在其他语言中也称为map,使用键-值(key-value)存储,具有极快的查找速度。 d = {'Michael': 95, 'Bob': 75,...
    99+
    2023-01-31
    Python dict
  • python中的logging
    python logging模块可能会令人困惑的地方通过参阅python logging模块的代码,发现一些有趣的现象: 1. logging对象其实是一个树形结构,每个创建的logging对象都是root logging对象的孩子结点。当...
    99+
    2023-01-31
    python logging
  • python中的struct
    我们知道python只定义了6种数据类型,字符串,整数,浮点数,列表,元组,字典。但是C语言中有些字节型的变量,在python中该如何实现呢?这点颇为重要,特别是要在网络上进行数据传输的话。python提供了一个struct模块来提供转换。...
    99+
    2023-01-31
    python struct
  • python中的setdefaulten
      http://blog.csdn.net/magicharvey/article/details/20055949 主题 Python #!/usr/bin/env python #encoding: utf-8 ...
    99+
    2023-01-31
    python setdefaulten
  • python中的rabbitmq
    RabbitMQ是一个在AMQP基础上完整的,可复用的企业消息系统。他遵循Mozilla Public License开源协议。MQ全称为Message Queue, 消息队列(MQ)是一种应用程序对应用程序的通信方法。应用程序通过读写...
    99+
    2023-01-30
    python rabbitmq
  • Python中的threading
    #!/usr/bin/env python# -*- coding: utf-8 -*-import threading, time#新线程执行的代码:def loop():    print('thread %s is running.....
    99+
    2023-01-31
    Python threading
  • Python中的栈
    在python中,个人理解为栈可以用列表来代替服从FILO:First In Last Out其中入栈为(利用append函数)stack = [] stack.append(<item>)出栈为(利用pop函数)stack....
    99+
    2023-01-31
    Python
  • Python中SQL——LIKE中的%
    转载自:http://blog.csdn.net/chenxiao_ji/article/details/51332791 需求:做项目的过程中,使用了MySQL数据库,后台使用Python来做逻辑层。项目中需要实现一个功能,通过输入搜索框...
    99+
    2023-01-31
    Python SQL
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作