Eventlet 是一个基于协程的并发网络库,用于实现Python中的并发编程。下面是一个使用 Eventlet 创建简单的 TCP 服务器和客户端通信的例子。
import eventletfrom eventlet.green import socketdef handle_socket(fd): print("客户端已连接") try: while True: data = fd.recv(1024) if not data: print("客户端已断开连接") break fd.sendall(data) # 回显接收到的数据 finally: fd.close()def start_server(): server = eventlet.listen(('0.0.0.0', 6000)) pool = eventlet.GreenPool() while True: new_sock, address = server.accept() print("接受来自 {0} 的连接".format(address)) pool.spawn_n(handle_socket, new_sock)if __name__ == "__main__": start_server()
这个服务器会在端口 6000 上监听新的连接,并为每个连接创建一个新的绿色线程(green thread)来处理数据。当客户端连接时,它会接收客户端发送的数据,并原样发送回去。
简单的 Eventlet 客户端示例:
import eventletfrom eventlet.green import socketdef client(): client_sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) client_sock.connect(('localhost', 6000)) message = "你好,服务器!" client_sock.sendall(message.encode('utf-8')) # 发送编码后的中文消息 data = client_sock.recv(1024) print("接收到:", data.decode('utf-8')) # 打印解码后的中文消息 client_sock.close()if __name__ == "__main__": client()
这个客户端会连接到服务器,发送一条消息,然后接收回显的消息并打印出来。
常见请求库:
requests:简单易用的 HTTP 客户端库,支持各种 HTTP 方法和请求头,并且能够处理常见的 HTTP 错误码。
urllib:Python 标准库中的 URL 编解码库,支持多种协议和编码方式。
httplib:Python 标准库中的 HTTP 客户端库,提供了基本的 HTTP 请求方法和响应处理功能。
http.client:Python 标准库中的 HTTP 客户端库,继承了 httplib 的功能并增加了更多的特性。
tornado:高性能 Web 框架和异步网络库,适用于高并发场景下的 Web 开发。
twisted:异步网络编程框架,支持 TCP、UDP、HTTP 等协议,适用于高负载和大规模分布式系统。
asyncio:Python 3.4 引入的标准库,提供了基于协程的异步 I/O 操作和任务调度机制。
aiohttp:基于 asyncio 实现的异步 HTTP 客户端和服务器框架,支持 WebSocket 和 WebSockets 协议。
grequests:基于 requests 库实现的异步 HTTP 客户端,使用 gevent 实现非阻塞 I/O。
gevent:基于 libev 或 libuv 实现的协程库,提供了高效的非阻塞 I/O 和并发性能。