Python 高级编程与实战:深入理解网络编程与异步IO

简介: 在前几篇文章中,我们探讨了 Python 的基础语法、面向对象编程、函数式编程、元编程、性能优化、调试技巧、数据科学、机器学习、Web 开发和 API 设计。本文将深入探讨 Python 在网络编程和异步IO中的应用,并通过实战项目帮助你掌握这些技术。

在前几篇文章中,我们探讨了 Python 的基础语法、面向对象编程、函数式编程、元编程、性能优化、调试技巧、数据科学、机器学习、Web 开发和 API 设计。本文将深入探讨 Python 在网络编程和异步IO中的应用,并通过实战项目帮助你掌握这些技术。

1. 网络编程基础

网络编程是编写通过网络进行通信的程序的技能。Python 提供了多种网络编程工具,如 socketasyncio

1.1 使用 socket 进行网络通信

socket 是 Python 的标准库之一,用于实现网络通信。

import socket

# 创建 TCP/IP socket
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

# 绑定 socket 到端口
server_address = ('localhost', 10000)
print(f"Starting up on {server_address}")
sock.bind(server_address)

# 监听连接
sock.listen(1)

while True:
    # 等待连接
    print("Waiting for a connection")
    connection, client_address = sock.accept()
    try:
        print(f"Connection from {client_address}")

        # 接收数据
        while True:
            data = connection.recv(16)
            print(f"Received {data}")
            if data:
                print("Sending data back to the client")
                connection.sendall(data)
            else:
                print("No more data from {client_address}")
                break
    finally:
        # 关闭连接
        connection.close()

1.2 使用 asyncio 进行异步网络编程

asyncio 是 Python 的标准库之一,用于编写异步IO程序。

import asyncio

async def handle_client(reader, writer):
    data = await reader.read(100)
    message = data.decode()
    addr = writer.get_extra_info('peername')
    print(f"Received {message} from {addr}")

    print(f"Send: {message}")
    writer.write(data)
    await writer.drain()

    print("Closing the connection")
    writer.close()

async def main():
    server = await asyncio.start_server(handle_client, '127.0.0.1', 8888)

    addr = server.sockets[0].getsockname()
    print(f"Serving on {addr}")

    async with server:
        await server.serve_forever()

asyncio.run(main())

2. 异步IO实战项目

2.1 使用 socket 构建简单的聊天服务器

我们将使用 socket 构建一个简单的聊天服务器,支持多个客户端的连接和消息广播。

import socket
import select

# 创建 TCP/IP socket
server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)

# 绑定 socket 到端口
server_address = ('localhost', 10000)
print(f"Starting up on {server_address}")
server_socket.bind(server_address)

# 监听连接
server_socket.listen(10)

# 列表用于保存所有的客户端连接
inputs = [server_socket]

while True:
    # 使用 select 等待可读的 socket
    readable, _, _ = select.select(inputs, [], [])

    for s in readable:
        if s is server_socket:
            # 有新的连接
            connection, client_address = server_socket.accept()
            print(f"New connection from {client_address}")
            inputs.append(connection)
        else:
            # 有数据可读
            data = s.recv(1024)
            if data:
                # 广播消息给所有客户端
                for client in inputs:
                    if client is not server_socket and client is not s:
                        client.send(data)
            else:
                # 客户端断开连接
                print(f"Closing connection from {s.getpeername()}")
                inputs.remove(s)
                s.close()

2.2 使用 asyncio 构建简单的 Web 服务器

我们将使用 asyncio 构建一个简单的 Web 服务器,支持静态文件的服务。

import asyncio
from aiohttp import web

async def handle(request):
    name = request.match_info.get('name', "Anonymous")
    text = f"Hello, {name}"
    return web.Response(text=text)

async def main():
    app = web.Application()
    app.router.add_get('/', handle)
    app.router.add_get('/{name}', handle)

    runner = web.AppRunner(app)
    await runner.setup()
    site = web.TCPSite(runner, 'localhost', 8080)
    await site.start()

    print("Serving on http://localhost:8080")
    await asyncio.Event().wait()

asyncio.run(main())

3. 总结

本文深入探讨了 Python 在网络编程和异步IO中的应用,并通过实战项目帮助你掌握这些技术。通过本文的学习,你应该能够使用 Python 编写网络应用程序和异步IO程序。

4. 进一步学习资源

希望本文能够帮助你进一步提升 Python 编程技能,祝你在编程的世界中不断进步!

相关文章
|
7月前
|
机器学习/深度学习 算法 安全
【PSO-LSTM】基于PSO优化LSTM网络的电力负荷预测(Python代码实现)
【PSO-LSTM】基于PSO优化LSTM网络的电力负荷预测(Python代码实现)
345 0
|
5月前
|
机器学习/深度学习 大数据 关系型数据库
基于python大数据的青少年网络使用情况分析及预测系统
本研究基于Python大数据技术,构建青少年网络行为分析系统,旨在破解现有防沉迷模式下用户画像模糊、预警滞后等难题。通过整合多平台亿级数据,运用机器学习实现精准行为预测与实时干预,推动数字治理向“数据驱动”转型,为家庭、学校及政府提供科学决策支持,助力青少年健康上网。
|
6月前
|
机器学习/深度学习 算法 PyTorch
【Pytorch框架搭建神经网络】基于DQN算法、优先级采样的DQN算法、DQN + 人工势场的避障控制研究(Python代码实现)
【Pytorch框架搭建神经网络】基于DQN算法、优先级采样的DQN算法、DQN + 人工势场的避障控制研究(Python代码实现)
161 1
|
6月前
|
机器学习/深度学习 算法 PyTorch
【DQN实现避障控制】使用Pytorch框架搭建神经网络,基于DQN算法、优先级采样的DQN算法、DQN + 人工势场实现避障控制研究(Matlab、Python实现)
【DQN实现避障控制】使用Pytorch框架搭建神经网络,基于DQN算法、优先级采样的DQN算法、DQN + 人工势场实现避障控制研究(Matlab、Python实现)
253 0
|
7月前
|
机器学习/深度学习 算法 调度
基于遗传算法GA算法优化BP神经网络(Python代码实现)
基于遗传算法GA算法优化BP神经网络(Python代码实现)
458 0
|
7月前
|
机器学习/深度学习 数据采集 TensorFlow
基于CNN-GRU-Attention混合神经网络的负荷预测方法(Python代码实现)
基于CNN-GRU-Attention混合神经网络的负荷预测方法(Python代码实现)
371 0
|
8月前
|
存储 监控 算法
基于 Python 跳表算法的局域网网络监控软件动态数据索引优化策略研究
局域网网络监控软件需高效处理终端行为数据,跳表作为一种基于概率平衡的动态数据结构,具备高效的插入、删除与查询性能(平均时间复杂度为O(log n)),适用于高频数据写入和随机查询场景。本文深入解析跳表原理,探讨其在局域网监控中的适配性,并提供基于Python的完整实现方案,优化终端会话管理,提升系统响应性能。
216 4
|
10月前
|
监控 应用服务中间件 Linux
掌握并发模型:深度揭露网络IO复用并发模型的原理。
总结,网络 I/O 复用并发模型通过实现非阻塞 I/O、引入 I/O 复用技术如 select、poll 和 epoll,以及采用 Reactor 模式等技巧,为多任务并发提供了有效的解决方案。这样的模型有效提高了系统资源利用率,以及保证了并发任务的高效执行。在现实中,这种模型在许多网络应用程序和分布式系统中都取得了很好的应用成果。
278 35
|
Ubuntu 网络协议 Unix
02理解网络IO:实现服务与客户端通信
网络IO指客户端与服务端通过网络进行数据收发的过程,常见于微信、QQ等应用。本文详解如何用C语言实现一个支持多客户端连接的TCP服务端,涉及socket编程、线程处理及通信流程,并分析“一消息一线程”模式的优缺点。
438 0
|
10月前
|
机器学习/深度学习 算法 测试技术
图神经网络在信息检索重排序中的应用:原理、架构与Python代码解析
本文探讨了基于图的重排序方法在信息检索领域的应用与前景。传统两阶段检索架构中,初始检索速度快但结果可能含噪声,重排序阶段通过强大语言模型提升精度,但仍面临复杂需求挑战
318 0
图神经网络在信息检索重排序中的应用:原理、架构与Python代码解析

推荐镜像

更多