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 编程技能,祝你在编程的世界中不断进步!

相关文章
|
10月前
|
机器学习/深度学习 算法 安全
【PSO-LSTM】基于PSO优化LSTM网络的电力负荷预测(Python代码实现)
【PSO-LSTM】基于PSO优化LSTM网络的电力负荷预测(Python代码实现)
441 0
|
8月前
|
机器学习/深度学习 大数据 关系型数据库
基于python大数据的青少年网络使用情况分析及预测系统
本研究基于Python大数据技术,构建青少年网络行为分析系统,旨在破解现有防沉迷模式下用户画像模糊、预警滞后等难题。通过整合多平台亿级数据,运用机器学习实现精准行为预测与实时干预,推动数字治理向“数据驱动”转型,为家庭、学校及政府提供科学决策支持,助力青少年健康上网。
|
9月前
|
机器学习/深度学习 算法 PyTorch
【Pytorch框架搭建神经网络】基于DQN算法、优先级采样的DQN算法、DQN + 人工势场的避障控制研究(Python代码实现)
【Pytorch框架搭建神经网络】基于DQN算法、优先级采样的DQN算法、DQN + 人工势场的避障控制研究(Python代码实现)
242 1
|
9月前
|
机器学习/深度学习 算法 PyTorch
【DQN实现避障控制】使用Pytorch框架搭建神经网络,基于DQN算法、优先级采样的DQN算法、DQN + 人工势场实现避障控制研究(Matlab、Python实现)
【DQN实现避障控制】使用Pytorch框架搭建神经网络,基于DQN算法、优先级采样的DQN算法、DQN + 人工势场实现避障控制研究(Matlab、Python实现)
384 0
|
10月前
|
机器学习/深度学习 算法 调度
基于遗传算法GA算法优化BP神经网络(Python代码实现)
基于遗传算法GA算法优化BP神经网络(Python代码实现)
615 0
|
10月前
|
机器学习/深度学习 数据采集 TensorFlow
基于CNN-GRU-Attention混合神经网络的负荷预测方法(Python代码实现)
基于CNN-GRU-Attention混合神经网络的负荷预测方法(Python代码实现)
541 0
|
监控 应用服务中间件 Linux
掌握并发模型:深度揭露网络IO复用并发模型的原理。
总结,网络 I/O 复用并发模型通过实现非阻塞 I/O、引入 I/O 复用技术如 select、poll 和 epoll,以及采用 Reactor 模式等技巧,为多任务并发提供了有效的解决方案。这样的模型有效提高了系统资源利用率,以及保证了并发任务的高效执行。在现实中,这种模型在许多网络应用程序和分布式系统中都取得了很好的应用成果。
341 35
|
11月前
|
存储 监控 算法
基于 Python 跳表算法的局域网网络监控软件动态数据索引优化策略研究
局域网网络监控软件需高效处理终端行为数据,跳表作为一种基于概率平衡的动态数据结构,具备高效的插入、删除与查询性能(平均时间复杂度为O(log n)),适用于高频数据写入和随机查询场景。本文深入解析跳表原理,探讨其在局域网监控中的适配性,并提供基于Python的完整实现方案,优化终端会话管理,提升系统响应性能。
277 4
|
调度 Python
探索Python高级并发与网络编程技术。
可以看出,Python的高级并发和网络编程极具挑战,却也饱含乐趣。探索这些技术,你将会发现:它们好比是Python世界的海洋,有穿越风暴的波涛,也有寂静深海的奇妙。开始旅途,探索无尽可能吧!
320 15
|
数据采集 存储 监控
Python 原生爬虫教程:网络爬虫的基本概念和认知
网络爬虫是一种自动抓取互联网信息的程序,广泛应用于搜索引擎、数据采集、新闻聚合和价格监控等领域。其工作流程包括 URL 调度、HTTP 请求、页面下载、解析、数据存储及新 URL 发现。Python 因其丰富的库(如 requests、BeautifulSoup、Scrapy)和简洁语法成为爬虫开发的首选语言。然而,在使用爬虫时需注意法律与道德问题,例如遵守 robots.txt 规则、控制请求频率以及合法使用数据,以确保爬虫技术健康有序发展。
1584 31