尧图网站建设 尧图网络
  • 首页
  • 关于我们
  • 服务项目
  • 案例展示
  • 建站流程
  • 资讯中心
  • 联系我们
首页/资讯中心/详情

多线程和网络总结

多线程和网络总结
📅 发布时间:2026/6/18 7:34:57

近期Python网络编程与多线程/多进程学习复盘

一、核心知识收获

1. 多线程与多进程编程

  • 多线程应用:实现图片下载(DownloadHanlder类继承Thread,重写run方法处理下载逻辑),利用线程并行处理网络IO任务,提高下载效率。
  • 多进程应用:拆分1亿元素大列表进行并行求和(Process类创建子进程,Queue实现进程间数据通信),理解“分而治之”思想在CPU密集型任务中的优势。
  • 关键区别:多线程适合IO密集型任务(如网络请求、文件读写),多进程适合CPU密集型任务(如大量计算);进程间需通过Queue等工具通信,线程可共享内存但需注意锁(threading.Lock)的使用。

2. TCP网络编程

  • 服务器端开发:
    • 套接字(socket)创建:指定AF_INET(IPv4)和SOCK_STREAM(TCP),通过bind绑定IP与端口、listen监听连接、accept阻塞等待客户端连接。
    • 多线程处理客户端:每个客户端连接对应一个线程(如FileTransferHandler),避免单线程阻塞,支持多客户端同时访问。
    • 数据传输:需将数据编码为字节流(encode('utf-8')),二进制文件(如图片)需通过base64编码转为文本格式,结合JSON实现结构化数据传输。
  • 客户端连接:
    • 工具连接:掌握CMD/PowerShell中通过Telnet(需启用Windows功能)、PowerShell原生命令(New-Object System.Net.Sockets.TCPClient)连接服务器的方法。
    • 自定义客户端:用socket的connect方法连接服务器,recv接收数据,实现与服务器的交互。

3. 数据处理与常见模块

  • 列表操作:理解列表切片(list[start:end])的“左闭右开”原则,用于多进程数据分片;认识到大列表(如1亿元素)创建的内存占用问题,学会用range(按需生成元素)优化。
  • 模块使用:
    • requests:发送HTTP请求获取API数据(如美女图片API、体重秤接口),解析JSON响应(resp.json())。
    • json:dumps将字典转为JSON字符串(用于网络传输),loads解析JSON字符串。
    • base64:b64encode/b64decode实现二进制数据与文本的转换,解决JSON无法传输二进制的问题。
    • time/datetime:time()计算程序执行时间,datetime.now()获取当前时间用于服务器数据返回。

二、典型疑问与解决方案

疑问类型 具体问题 解决方案
函数/方法参数问题 1. task_handler()缺少curr_list和result_queue参数
2. socket.bind()参数错误
1. 调用时传入所有必需参数,多进程中通过args传递元组参数
2. bind需传入(IP, 端口)格式的元组
数据结构错误 1. KeyError: 'newslist'(API返回无该字段)
2. TypeError: string indices must be integers
1. 打印API完整返回数据,确认字段名;检查APIKey有效性
2. 确认循环变量类型(如是否为字典),修正索引方式
网络连接问题 1. WinError 10049(绑定无效IP)
2. telnet/nc命令不可用
1. 绑定0.0.0.0(所有可用IP)或本机真实IP(ipconfig查看)
2. 启用Telnet客户端,或用PowerShell原生命令连接
多线程/进程逻辑问题 1. 计时不准确(漏算数据准备时间)
2. 进程间数据共享失败
1. 将start = time()移到程序最开始,统计全程耗时
2. 用multiprocessing.Queue实现进程间数据传递

三、易错点与改进方向

1. 高频易错点

  • 参数格式:忽略bind的元组参数格式、args的元组传递(如少加逗号)、函数调用时参数数量不匹配。
  • 数据类型判断:未提前打印API返回数据结构,想当然使用字段名;混淆字符串与字典的索引方式。
  • 资源释放与效率:多进程/线程未正确关闭连接(如client.close());大列表重复创建导致内存浪费,未用range优化。
  • 环境配置:忽略Windows系统默认未启用Telnet,直接使用telnet命令导致报错。

2. 后续改进方向

  • 代码健壮性:增加异常处理(如try-except捕获网络请求错误、文件读写错误),避免程序崩溃。
  • 性能优化:
    • 多线程下载时设置线程池(concurrent.futures.ThreadPoolExecutor),避免创建过多线程。
    • 大文件传输时拆分数据(如分块发送),避免单次发送数据过大导致阻塞。
  • 功能扩展:基于现有TCP服务器,实现客户端向服务器上传文件、服务器对客户端身份验证等功能,深化网络编程理解。
  • 调试能力:遇到问题时先打印关键数据(如变量类型、API返回、IP/端口配置),逐步定位问题,减少盲目修改代码。

相关新闻

  • 详细介绍:ASR技术(自动语音识别)深度解析
  • 1.1 采样问题 Sampling and Bandits
  • 【题解】10.6 国庆中秋 提高组 热身赛

最新新闻

  • 机器学习落地四大致命坑:数据泄露、指标误用、部署不一致、盲目调参
  • 算法优化中的分支预测与流水线设计的技术8
  • 浏览器用户画像分析大屏搭建——从布局到交互
  • OpenProject深度解析:开源项目管理平台的架构设计与企业级实践指南
  • 上海婚姻纠纷律所榜单:五家专业靠谱机构实务能力与服务特色全解析 - 外贸老黄
  • 2026娄底防水补漏靠谱服务商盘点:屋面/厨卫/外墙/地下室渗水维修详解,适配湘中丘陵梅雨高湿防潮防冻甄选指南 - 宅安选房屋修缮

日新闻

  • 5分钟掌握Python进化算法:Geatpy高性能优化工具完全指南
  • Microchip 24AA044 EEPROM选型与应用全指南:从参数解析到实战编程
  • 华为的鸿蒙到底有多牛?为什么称作遥遥领先?

周新闻

  • 3步解锁iOS设备:applera1n激活锁绕过完全指南
  • 39 2026 人工智能证书终极盘点,普通人选 AI 证书可以从这些方向入手
  • Redis 暴露公网有多危险?从端口检查到补救步骤

月新闻

  • 【总结】入门篇:50句话让你记住架构核心概念
  • WeChatMsg技术方案解析:实现Mac微信数据自主管理的完整解决方案
  • WeChatMsg:革新性微信数据备份方案,打造你的专属数字记忆库

关于尧图

  • 公司简介
  • 团队介绍
  • 企业文化
  • 荣誉资质

服务项目

  • 定制开发
  • 电商建站
  • UI 设计
  • 运维服务

快速链接

  • 案例展示
  • 建站流程
  • 常见问题
  • 资讯中心

联系方式

  • 📍北京市朝阳区互联网产业园 A 座 10 层
  • 📞400-888-8888
  • ✉️contact@rkmt.cn
  • 🕐周一至周日 9:00-21:00

© 2024 北京尧图网络科技有限公司 版权所有 | 京 ICP 备 XXXXXXXX 号