人工智能之编程进阶 Python高级:第八章 网络并发类模块

人工智能之编程进阶 Python高级

第八章 网络并发类模块


@

目录
  • 人工智能之编程进阶 Python高级
  • 前言
    • 1. TCP 服务端(监听连接)
    • 2. TCP 客户端
    • 3. UDP 示例(无连接)
  • 🔁 二、多线程(threading)
      • 1. 基本用法
    • 2. 线程安全(加锁)
  • ⚡ 三、异步 I/O(asyncio)
    • 1. 基本异步函数
    • 2. 异步 HTTP 请求(需第三方库)
  • 🧒 四、子进程(subprocess)
    • 1. 简单运行命令
    • 2. 启动长期运行的进程
    • 3. 与多进程结合(multiprocessing
  • 🔄 五、进程 vs 线程:本质区别与选型建议
      • 📌 一句话总结:
      • 💡 实际选型建议:
  • 🔍 六、四大方式对比总结
  • ✅ 七、最佳实践建议
  • 资料关注


前言

本文针对于网络编程以及网络编程中的多线程以及异步编程和子进程进行详细的叙述,并对这几种方式进行了对比总结。

---# 🌐 一、网络编程(socket)

Python 使用 socket 模块进行底层网络通信,支持 TCP/UDP。

1. TCP 服务端(监听连接)

import socketserver = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server.bind(('localhost', 8888))
server.listen(5)  # 最多排队 5 个连接print("服务器启动,等待连接...")while True:client, addr = server.accept()print(f"客户端 {addr} 已连接")data = client.recv(1024).decode('utf-8')print("收到:", data)client.send(b"Hello from server!")client.close()

2. TCP 客户端

import socketclient = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
client.connect(('localhost', 8888))
client.send(b"Hello server!")
response = client.recv(1024)
print("服务器回复:", response.decode())
client.close()

3. UDP 示例(无连接)

# 服务端
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
sock.bind(('localhost', 9999))
data, addr = sock.recvfrom(1024)
sock.sendto(b"Got it!", addr)# 客户端
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
sock.sendto(b"Hi UDP!", ('localhost', 9999))
data, _ = sock.recvfrom(1024)

✅ ​适用场景​:自定义协议、学习网络原理
❌ ​不推荐​:写 Web 服务(用 Flask/FastAPI 更高效)


🔁 二、多线程(threading)

用于 ​I/O 密集型任务​(如文件读写、网络请求),但受 GIL 限制,​不能真正并行 CPU 计算​。

1. 基本用法

import threading
import timedef worker(name):print(f"线程 {name} 开始")time.sleep(2)print(f"线程 {name} 结束")# 创建并启动线程
t1 = threading.Thread(target=worker, args=("A",))
t2 = threading.Thread(target=worker, args=("B",))t1.start()
t2.start()t1.join()  # 等待线程结束
t2.join()
print("所有线程完成")

2. 线程安全(加锁)

lock = threading.Lock()
counter = 0def increment():global counterfor _ in range(100000):with lock:  # 或 lock.acquire() / lock.release()counter += 1t1 = threading.Thread(target=increment)
t2 = threading.Thread(target=increment)
t1.start(); t2.start()
t1.join(); t2.join()
print(counter)  # 应为 200000

⚠️ ​注意​:

  • Python 的 GIL(全局解释器锁) 使得同一时间只有一个线程执行 Python 字节码。
  • 所以多线程适合 ​I/O 阻塞场景​(如下载、数据库查询),不适合 CPU 密集型任务。

✅ ​典型用途​:同时处理多个客户端请求、并发爬虫(配合 requests)


⚡ 三、异步 I/O(asyncio)

Python 的 ​原生异步框架​,使用 async/await 实现单线程高并发,特别适合 ​大量 I/O 操作​(如 HTTP 请求、数据库查询)。

1. 基本异步函数

import asyncioasync def say_hello(delay, name):await asyncio.sleep(delay)  # 异步等待(不阻塞其他任务)print(f"Hello {name}!")async def main():# 并发运行多个协程await asyncio.gather(say_hello(1, "Alice"),say_hello(2, "Bob"),say_hello(0.5, "Charlie"))# 启动事件循环
asyncio.run(main())

2. 异步 HTTP 请求(需第三方库)

import aiohttp
import asyncioasync def fetch(url):async with aiohttp.ClientSession() as session:async with session.get(url) as response:return await response.text()async def main():urls = ["https://httpbin.org/delay/1"] * 5tasks = [fetch(url) for url in urls]results = await asyncio.gather(*tasks)print("全部完成!")asyncio.run(main())

✅ ​优势​:

  • 单线程高并发(万级连接)
  • 资源占用低
  • 代码逻辑清晰(避免回调地狱)

❌ ​限制​:

  • 所有 I/O 操作必须是 ​异步兼容的​(不能直接用 time.sleep()requests.get()
  • 不适合 CPU 密集型任务(会阻塞事件循环)

📌 ​适用场景​:高性能 Web 服务(FastAPI、aiohttp)、实时聊天、爬虫


🧒 四、子进程(subprocess)

用于 ​启动和控制外部程序​(如 shell 命令、其他语言脚本),可绕过 GIL,实现真正的 ​CPU 并行​。

1. 简单运行命令

import subprocess# 运行命令并获取输出
result = subprocess.run(["ls", "-l"], capture_output=True, text=True)
print(result.stdout)

2. 启动长期运行的进程

proc = subprocess.Popen(["ping", "baidu.com"],stdout=subprocess.PIPE,stderr=subprocess.PIPE,text=True
)# 读取输出(非阻塞需配合 select 或线程)
try:stdout, stderr = proc.communicate(timeout=10)print(stdout)
except subprocess.TimeoutExpired:proc.kill()print("超时,已终止")

3. 与多进程结合(multiprocessing

from multiprocessing import Pool
import osdef cpu_task(n):return sum(i*i for i in range(n))  # 纯 CPU 计算if __name__ == '__main__':with Pool() as pool:  # 自动使用 CPU 核心数results = pool.map(cpu_task, [1000000] * 4)print(results)

✅ ​关键点​:

  • subprocess 适合调用 外部程序
  • multiprocessing 适合 Python 内部 CPU 并行
  • 两者都能绕过 GIL,实现真正并行

📌 ​典型用途​:

  • 调用 ffmpeg 处理视频
  • 执行 shell 脚本
  • 并行处理图像/数据(用 multiprocessing

🔄 五、进程 vs 线程:本质区别与选型建议

这是很多初学者容易混淆的核心问题。下面从多个维度对比:

对比项 线程(Thread) 进程(Process)
定义 同一进程内的执行单元 操作系统分配资源的基本单位
内存空间 共享进程内存(变量、堆) 独立内存空间(不共享)
创建开销 小(轻量) 大(需复制内存、资源)
通信方式 直接读写共享变量(需加锁) 需通过 IPC(如 Queue、Pipe、共享内存)
稳定性 一个线程崩溃 → 整个进程崩溃 一个进程崩溃 → 不影响其他进程
GIL 影响 受 GIL 限制,Python 中无法并行 CPU 绕过 GIL,真正并行 CPU
适用任务 I/O 密集型(网络、磁盘) CPU 密集型(计算、图像处理)
Python 模块 threading multiprocessing / subprocess

📌 一句话总结:

  • 线程 = 共享内存 + 轻量 + 适合等 I/O
  • 进程 = 独立内存 + 重量 + 适合干 CPU 活

💡 实际选型建议:

  • 爬取 100 个网页? → 用 threadingasyncio(都在等网络响应)
  • 计算 100 万个数的平方和? → 用 multiprocessing(真正并行计算)
  • 调用外部程序(如 ffmpeg)? → 用 subprocess(天然隔离、安全)

⚠️ 注意:
在 Python 中,由于 GIL(全局解释器锁) 的存在,​多线程无法提升 CPU 密集型任务的性能​。这是选择进程而非线程的关键原因。

🔍 六、四大方式对比总结

方式 是否并行 适用任务类型 是否绕过 GIL 典型场景
多线程 (threading) ❌(伪并行) I/O 密集型 爬虫、文件读写、多客户端
异步 I/O (asyncio) ❌(单线程) I/O 密集型 高并发 Web 服务、实时通信
子进程 (subprocess) 调用外部程序 执行 shell、调用 C/Java 程序
多进程 (multiprocessing) CPU 密集型 数据计算、图像处理、科学计算

💡 ​一句话选型​:

  • 等网络/磁盘? → 用 threadingasyncio
  • 算数学/处理数据? → 用 multiprocessing
  • 跑外部命令? → 用 subprocess

✅ 七、最佳实践建议

  1. Web 服务优先选 asyncio​(如 FastAPI + async/await),性能远超多线程。
  2. 不要在 asyncio 中混用阻塞代码​(如 time.sleep()requests),会卡住整个事件循环。
  3. CPU 密集任务别用 threading​,改用 multiprocessing
  4. 子进程记得处理超时和异常​,避免僵尸进程。
  5. 线程间共享数据务必加锁​(LockQueue)。
  6. 开发阶段可用 concurrent.futures 统一接口:
    from concurrent.futures import ThreadPoolExecutor, ProcessPoolExecutor
    

资料关注

公众号:咚咚王

《Python编程:从入门到实践》
《利用Python进行数据分析》
《算法导论中文第三版》
《概率论与数理统计(第四版) (盛骤) 》
《程序员的数学》
《线性代数应该这样学第3版》
《微积分和数学分析引论》
《(西瓜书)周志华-机器学习》
《TensorFlow机器学习实战指南》
《Sklearn与TensorFlow机器学习实用指南》
《模式识别(第四版)》
《深度学习 deep learning》伊恩·古德费洛著 花书
《Python深度学习第二版(中文版)【纯文本】 (登封大数据 (Francois Choliet)) (Z-Library)》
《深入浅出神经网络与深度学习+(迈克尔·尼尔森(Michael+Nielsen) 》
《自然语言处理综论 第2版》
《Natural-Language-Processing-with-PyTorch》
《计算机视觉-算法与应用(中文版)》
《Learning OpenCV 4》
《AIGC:智能创作时代》杜雨+&+张孜铭
《AIGC原理与实践:零基础学大语言模型、扩散模型和多模态模型》
《从零构建大语言模型(中文版)》
《实战AI大模型》
《AI 3.0》

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/970311.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2025CCPC济南站游记

Day -1 不想学文化课。 Day 0 在车上颓。 队友落在烟台了,下午热身赛可能要单打。 学校午饭不错啊,吃了30元,剩下餐券换成饮料了。吃的烤肉拌饭+羊肉泡馍。为啥我觉得羊肉泡馍不如直接喝羊汤好喝。 下午1点到酒店,…

ssh登录报错Permission denied(publickey,gssapi-keyex,gssapi-with-mic,password

ssh 密码登录报错Permission denied(publickey,gssapi-keyex,gssapi-with-mic,password) 当我启动一个虚拟机,想要像往常一样使用密码登录的时候, sshpass -p 123456 ssh -o StrictHostKeyChecking=no root@127.0.0.…

Bisq交易协议全解析:从多签到MuSig的技术演进

本文深入解析Bisq去中心化交易所的交易协议技术架构,涵盖多签协议演进、MuSig加密方案、闪电网络集成等核心技术,详细介绍了各代协议的安全模型和隐私保护机制,以及未来路线图中的跨链原子交换等创新功能。Bisq交易…

十六岁的断章

不知道标题该写什么,就这样吧。 没有人理解我。免责声明 本文由 AI 辅助创作,如有雷同,纯属巧合。周日争执 我不知道该从何写起,但确实,我已经无计可施。 下面的对话是我凭记忆概括的,具体措辞已不太清晰。 那天…

浅谈 fhq-treap —— 或是 Splay 的不二选择?

本文章同步发布至 浅谈 fhq-treap —— 或是 Splay 的不二选择? 一、从 BST 谈起 BST 的意思是二叉搜索树,它满足对于所有子树的根节点 \(x\),满足 \(v_{rson} > v_x > v_{lson}\),也就是说,它的中序遍历为…

vba 处理特定段落前的表观空行中的分页符

存在 word 文档另存为 wps 时,出现页码变多,与 word 中的不一致的情况。对于其中的某页标题行前有空行,空行内包含分页符与前面的文字在同一段落。需要删除改分页符,同时使原标题段落格式(大纲级别,编号,下划线…

人工智能之编程进阶 Python高级:第六章 文件类模块

人工智能之编程进阶 Python高级:第六章 文件类模块人工智能之编程进阶 Python高级 第六章 文件类模块@目录人工智能之编程进阶 Python高级前言一、csv 模块:读写 CSV 文件1. 写入 CSV2. 读取 CSV二、json 模块:处理…

PQ v.Next Alpha阶段发布

Alpha 阶段的发布 1、新闻稿发布 我们的PQ v.Next v1.1.9版本顺利发布!PQ 是一款专为知识分享场景设计的AI驱动型互动平台。它旨在通过动态题目生成和即时反馈,将传统的单向演讲转变为一场沉浸式、可量化的双向交流,…

国产数据库替代MongoDB的技术实践过程:金仓多模数据库在电子证照框架中的深度应用

国产数据库替代MongoDB的技术实践过程:金仓多模数据库在电子证照框架中的深度应用2025-11-19 19:09 tlnshuju 阅读(0) 评论(0) 收藏 举报pre { white-space: pre !important; word-wrap: normal !important; over…

三分稀疏图染色的多项式时间证明

别看(简介 三分图染色指对于一个图进行三种颜色的染色,每条边的两个端点颜色不同 本文旨解决 m-n$\le$7的染色问题,即边数只比点数多7 做法 考虑对于每个度数$\ge$3的结点作暴力dfs染色,代码差不多就是这样的 即能…

251119

JT-JY14T3S1Hello, FL conference hotel. Hi, i want to ask about conference facilities of the hotel. Have i came through to the right person? You have, i am the customer services manager. My name is Ang…

实用指南:分布式架构未来趋势:从云原生到智能边缘的演进之路

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

人工智能之编程进阶 Python高级:第七章 数据库类模块

人工智能之编程进阶 Python高级:第七章 数据库类模块人工智能之编程进阶 Python高级 第七章 数据库类模块@目录人工智能之编程进阶 Python高级前言🗄️ 一、MySQL(关系型数据库)1. 安装(本地开发)Windows / mac…

linux for 跳出循环

在 Linux 中,如果你想“跳出循环”,通常是指在 for 循环中提前终止循环。这可以通过 break 或 exit 命令实现。下面是几种常见方式:1. 使用 break 跳出 for 循环 for i in {1..5}; doif [ $i -eq 3 ]; thenecho +…

用USB BLASTER II 下载sof文件没有问题,debug波形也没有问题。但是下载jic问题异常?

用USB BLASTER II 下载sof文件没有问题,debug波形也没有问题。但是下载jic问题异常? 1. 概述USB Blaster II是用于Intel(Altera) FPGA/CPLD高速编程设备。并且用于Intel FPGA有快的速度,最高24M运行工作。支持FPGA…

Linux用户管理相关知识

Linux用户管理 1.Linux操作系统开机流程 打开电源: 1.开机自检BIOS # BIOS(Basic Input/Output System) 检查cpu、内存、磁盘、硬件是否有问题。 2.MBR引导 # 主引导记录,通过硬盘启动 MBR--> /boot/swap…

AI浪潮下的机遇与挑战:从巨头动态看未来趋势

标签:AI技术、云服务、职业发展、行业观察最近刷新闻,发现AI领域又炸开了锅。从云服务故障到巨头战略升级,再到人才流动,整个行业像打了鸡血一样高速运转。作为一个对技术敏感的人,我忍不住把这些碎片信息拼凑起来…

CCF GESP 五级真题考频与知识点速查表

CCF GESP 五级真题考频与知识点速查表 (按 2023-2025 共 7 场正式考试出现次数降序,同频次按时间倒序)序号 题号 标题 出现次数 核心知识点(五级大纲) 难度标签1 B3871 因数分解 3 次 质因数分解 + 质数筛 普及−…

人工智能之编程进阶 Python高级:第五章 时间类模块

人工智能之编程进阶 Python高级:第五章 时间类模块人工智能之编程进阶 Python高级 第五章 时间类模块@目录人工智能之编程进阶 Python高级前言一、time 模块:底层时间操作(Unix 时间戳)常用函数时间格式化代码(st…

NSSCTF(WebFTP —— easyupload1.0) - 实践

NSSCTF(WebFTP —— easyupload1.0) - 实践pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", &qu…