0

0

自动化脚本如何实现多线程处理的完整流程【教程】

舞姬之光

舞姬之光

发布时间:2025-12-17 06:45:22

|

855人浏览过

|

来源于php中文网

原创

多线程适合IO密集型任务,CPU密集型应选多进程;用ThreadPoolExecutor比原生threading更安全易管理;需注意线程安全、异常捕获与超时控制。

自动化脚本如何实现多线程处理的完整流程【教程】

自动化脚本实现多线程处理,核心是让多个任务并行执行,提升整体效率,但不是所有场景都适合——IO密集型(如网络请求、文件读写)收益明显,CPU密集型(如大量计算)反而可能因GIL限制变慢,需优先考虑多进程。

明确任务类型,选对并发模型

先判断脚本主要耗时在哪:

  • 频繁调用API、下载网页、读写硬盘 → 用 threadingconcurrent.futures.ThreadPoolExecutor
  • 做图像处理、数值运算、加密解密 → 改用 multiprocessingconcurrent.futures.ProcessPoolExecutor
  • 既要异步响应又要高吞吐(比如爬虫+解析+存库)→ 可组合使用 asyncio + 线程池/进程池

用 ThreadPoolExecutor 快速上手多线程

比原生 threading 更安全、易管理。示例:同时请求10个URL

from concurrent.futures import ThreadPoolExecutor, as_completed
import requests

def fetch_url(url): try: return url, requests.get(url, timeout=5).status_code except Exception as e: return url, f"Error: {e}"

urls = ["https://www.php.cn/link/5f69e19efaba426d62faeab93c308f5c"] * 10

with ThreadPoolExecutor(max_workers=4) as executor:

提交全部任务

futures = [executor.submit(fetch_url, u) for u in urls]
# 按完成顺序获取结果
for future in as_completed(futures):
    url, result = future.result()
    print(f"{url} → {result}")

网趣购物系统加强升级版
网趣购物系统加强升级版

新版本程序更新主要体现在:完美整合BBS论坛程序,用户只须注册一个帐号,即可全站通用!采用目前流行的Flash滚动切换广告 变换形式多样,受人喜爱!在原有提供的5种在线支付基础上增加北京云网支付!对留言本重新进行编排,加入留言验证码,后台有留言审核开关对购物系统的前台进行了一处安全更新。在原有文字友情链接基础上,增加LOGO友情链接功能强大的6种在线支付方式可选,自由切换。对新闻列表进行了调整,

下载

关键点:max_workers 控制并发数,一般设为 CPU核数×2~5(IO密集型可更高);as_completed 返回完成即处理,不按提交顺序。

线程安全与资源协调不能忽略

多个线程共享内存,操作全局变量、写同一文件、共用数据库连接时容易出错:

  • threading.Lock 保护临界区(比如记录日志、更新计数器)
  • 避免在线程中复用不可重入对象(如 requests.Session 实例可复用,但需确保线程安全;某些数据库驱动需每线程独立连接)
  • queue.Queue 做线程间通信,比全局 list + lock 更可靠

异常捕获和超时控制必须显式设置

一个线程崩溃默认不会中断其他线程,也不向上抛错,容易“静默失败”:

  • 每个任务函数内部要 try/except,把错误信息带出来
  • 给 requests、time.sleep 等加 timeout,防止某个请求卡死拖垮整个池
  • Executor 的 submit 返回 Future 对象,可用 future.exception() 主动检查是否出错

基本上就这些。多线程不是万能加速键,关键是识别瓶颈、合理分发、守住边界。跑通第一个 ThreadPoolExecutor 示例后,再逐步加上锁、队列、错误重试,就稳了。

相关专题

更多
session失效的原因
session失效的原因

session失效的原因有会话超时、会话数量限制、会话完整性检查、服务器重启、浏览器或设备问题等等。详细介绍:1、会话超时:服务器为Session设置了一个默认的超时时间,当用户在一段时间内没有与服务器交互时,Session将自动失效;2、会话数量限制:服务器为每个用户的Session数量设置了一个限制,当用户创建的Session数量超过这个限制时,最新的会覆盖最早的等等。

308

2023.10.17

session失效解决方法
session失效解决方法

session失效通常是由于 session 的生存时间过期或者服务器关闭导致的。其解决办法:1、延长session的生存时间;2、使用持久化存储;3、使用cookie;4、异步更新session;5、使用会话管理中间件。

740

2023.10.18

cookie与session的区别
cookie与session的区别

本专题整合了cookie与session的区别和使用方法等相关内容,阅读专题下面的文章了解更详细的内容。

88

2025.08.19

全局变量怎么定义
全局变量怎么定义

本专题整合了全局变量相关内容,阅读专题下面的文章了解更多详细内容。

78

2025.09.18

python 全局变量
python 全局变量

本专题整合了python中全局变量定义相关教程,阅读专题下面的文章了解更多详细内容。

96

2025.09.18

线程和进程的区别
线程和进程的区别

线程和进程的区别:线程是进程的一部分,用于实现并发和并行操作,而线程共享进程的资源,通信更方便快捷,切换开销较小。本专题为大家提供线程和进程区别相关的各种文章、以及下载和课程。

481

2023.08.10

Python 多线程与异步编程实战
Python 多线程与异步编程实战

本专题系统讲解 Python 多线程与异步编程的核心概念与实战技巧,包括 threading 模块基础、线程同步机制、GIL 原理、asyncio 异步任务管理、协程与事件循环、任务调度与异常处理。通过实战示例,帮助学习者掌握 如何构建高性能、多任务并发的 Python 应用。

143

2025.12.24

数据库三范式
数据库三范式

数据库三范式是一种设计规范,用于规范化关系型数据库中的数据结构,它通过消除冗余数据、提高数据库性能和数据一致性,提供了一种有效的数据库设计方法。本专题提供数据库三范式相关的文章、下载和课程。

348

2023.06.29

高德地图升级方法汇总
高德地图升级方法汇总

本专题整合了高德地图升级相关教程,阅读专题下面的文章了解更多详细内容。

72

2026.01.16

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
计算机系统从应用层到底层
计算机系统从应用层到底层

共6课时 | 0.3万人学习

开源物联网开发实例
开源物联网开发实例

共6课时 | 0.4万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号