python3 监听

赵幸婉 1周前 11浏览 0评论

Python3 监听是一种实时读取外部事件并作出反应的方法。它的应用范围广泛,从基本的用户交互到高级的网络编程都需要使用监听技术。在 Python 中,我们可以使用以下两种主要的库来实现监听:

1. select 模块:是在 Unix-like 系统上通用的一种轻量级的异步 I/O 模型,通过使用 select() 和 poll() 系统调用来实现非阻塞 I/O。
2. asyncio 模块:是一个 Python 的标准库,提供了一种基于事件循环的异步 I/O 模型,使得高层次的代码拥有良好的可重用性和表现力。

在实际使用中,我们通常使用 select 模块来监听文件描述符,例如:

import select
import socket

# 创建一个服务器 socket
server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server.bind(('localhost', 8080))
server.listen(5)

# 监听服务端 socket
inputs = [server]
while True:
    # 通过 select 监听文件描述符
    readable, _, _ = select.select(inputs, [], [])
    
    for sock in readable:
        # 如果是服务端 socket,则代表有新的客户端连接请求
        if sock == server:
            client, addr = server.accept()
            inputs.append(client)
        
        # 如果是客户端 socket,则代表有客户端消息
        else:
            data = sock.recv(1024)
            if not data:
                inputs.remove(sock)
                sock.close()
            else:
                print('Received:', data)

如上所示,我们首先创建一个服务器 socket,然后使用 select 监听该 socket,在可读事件发生时,我们根据事件类型做出相应的响应。

需要注意的是,在处理客户端消息时,我们应该使用 recv() 函数来接收消息,同时判断返回值是否为空,若为空则代表客户端已经关闭了连接。

总的来说,Python3 监听是一项非常重要的技术,它可以帮助我们实现实时响应外部事件的功能,是 Python 编程中必不可少的一部分。