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

相关文章
|
3月前
|
机器学习/深度学习 PyTorch TensorFlow
卷积神经网络深度解析:从基础原理到实战应用的完整指南
蒋星熠Jaxonic,深度学习探索者。深耕TensorFlow与PyTorch,分享框架对比、性能优化与实战经验,助力技术进阶。
|
3月前
|
监控 Linux 测试技术
C++零拷贝网络编程实战:从理论到生产环境的性能优化之路
🌟 蒋星熠Jaxonic,技术宇宙中的星际旅人。深耕C++与零拷贝网络编程,从sendfile到DPDK,实战优化服务器性能,毫秒级响应、CPU降60%。分享架构思维,共探代码星辰大海!
|
4月前
|
数据采集 机器学习/深度学习 人工智能
Python:现代编程的首选语言
Python:现代编程的首选语言
333 102
|
3月前
|
机器学习/深度学习 大数据 关系型数据库
基于python大数据的青少年网络使用情况分析及预测系统
本研究基于Python大数据技术,构建青少年网络行为分析系统,旨在破解现有防沉迷模式下用户画像模糊、预警滞后等难题。通过整合多平台亿级数据,运用机器学习实现精准行为预测与实时干预,推动数字治理向“数据驱动”转型,为家庭、学校及政府提供科学决策支持,助力青少年健康上网。
|
3月前
|
Python
Python编程:运算符详解
本文全面详解Python各类运算符,涵盖算术、比较、逻辑、赋值、位、身份、成员运算符及优先级规则,结合实例代码与运行结果,助你深入掌握Python运算符的使用方法与应用场景。
273 3
|
3月前
|
数据处理 Python
Python编程:类型转换与输入输出
本教程介绍Python中输入输出与类型转换的基础知识,涵盖input()和print()的使用,int()、float()等类型转换方法,并通过综合示例演示数据处理、错误处理及格式化输出,助你掌握核心编程技能。
514 3
|
3月前
|
并行计算 安全 计算机视觉
Python多进程编程:用multiprocessing突破GIL限制
Python中GIL限制多线程性能,尤其在CPU密集型任务中。`multiprocessing`模块通过创建独立进程,绕过GIL,实现真正的并行计算。它支持进程池、队列、管道、共享内存和同步机制,适用于科学计算、图像处理等场景。相比多线程,多进程更适合利用多核优势,虽有较高内存开销,但能显著提升性能。合理使用进程池与通信机制,可最大化效率。
334 3
|
3月前
|
机器学习/深度学习 数据采集 人工智能
深度学习实战指南:从神经网络基础到模型优化的完整攻略
🌟 蒋星熠Jaxonic,AI探索者。深耕深度学习,从神经网络到Transformer,用代码践行智能革命。分享实战经验,助你构建CV、NLP模型,共赴二进制星辰大海。
|
4月前
|
机器学习/深度学习 人工智能 算法
卷积神经网络深度解析:从基础原理到实战应用的完整指南
蒋星熠Jaxonic带你深入卷积神经网络(CNN)核心技术,从生物启发到数学原理,详解ResNet、注意力机制与模型优化,探索视觉智能的演进之路。
481 11
|
3月前
|
Java 调度 数据库
Python threading模块:多线程编程的实战指南
本文深入讲解Python多线程编程,涵盖threading模块的核心用法:线程创建、生命周期、同步机制(锁、信号量、条件变量)、线程通信(队列)、守护线程与线程池应用。结合实战案例,如多线程下载器,帮助开发者提升程序并发性能,适用于I/O密集型任务处理。
359 0

热门文章

最新文章

推荐镜像

更多