编程与 AI13 分钟阅读更新于 2026-07-15

Python 脚本运行慢怎么办:先从这几类问题排查

不讲空泛调优,直接从文件读取、循环、数据结构、重复计算、接口请求和批量处理几个方向排查 Python 脚本性能问题。

相关工具

先确认慢在哪里

Python 脚本慢,不要一上来就换框架、换语言。先确认慢在哪里:是读文件慢,处理循环慢,网络请求慢,还是写结果慢。很多脚本真正耗时的是接口请求、磁盘读写或重复解析文件,而不是 Python 语法本身。

可以先用最简单的计时方式定位:

python代码示例
from time import perf_counter

start = perf_counter()

# 这里放你要测试的代码

end = perf_counter()
print(f"耗时:{end - start:.3f} 秒")

把读取、处理、输出分开计时,你就能知道该优化哪一段。没有定位之前的优化,基本是在猜。

别在循环里反复做昂贵操作

循环里最容易藏性能问题。比如每处理一行就打开一次文件,每处理一条数据就重新读取配置,每次循环都编译正则,每次都从列表里查找同一个 ID。这些动作单次不明显,放大到几万条就慢了。

正则可以提前编译:

python代码示例
import re

pattern = re.compile(r"ERROR|WARN")

for line in lines:
    if pattern.search(line):
        print(line)

字典索引也应该提前建好。比如要按用户 ID 补资料,不要每条订单都遍历一遍用户列表。先把用户列表变成 user_map,再查询。

大文件不要一次性全读进内存

小文件直接 read 没问题,大文件就要逐行处理。日志、CSV、导出数据可能有几百 MB,全部读进内存会卡住甚至崩溃。逐行读取更稳,也方便边处理边输出。

示例:

python代码示例
with open("app.log", "r", encoding="utf-8", errors="ignore") as f:
    for line in f:
        if "ERROR" in line:
            print(line.strip())

如果要处理 CSV,可以考虑 csv 模块逐行读。数据分析场景再考虑 pandas 分块读取。先让脚本能稳定跑完,再考虑速度。

网络请求慢要看并发、超时和重试

如果脚本要请求很多接口,慢通常不在 Python 循环,而在网络等待。每个请求等 1 秒,1000 个请求就是很长时间。此时要设置 timeout,记录失败原因,必要时再考虑并发。不要没有超时地一直等,也不要失败后无限重试。

基础请求要加超时:

python代码示例
import requests

try:
    response = requests.get("https://api.example.com/data", timeout=10)
    print(response.status_code)
except requests.Timeout:
    print("请求超时")

如果脚本已经变成正式任务,服务器、数据库和网络稳定性也会影响执行效率。需要部署定时任务或接口服务时,可以结合云服务器资源规划,阿里云官方活动页可以作为参考:https://www.aliyun.com/daily-act/ecs/activity_selection?userCode=hzn6nvhm

常见问题

Python 慢是不是一定要换语言?

不一定。先定位瓶颈,很多问题来自文件读写、网络请求、数据结构选择和重复计算。

大文件应该怎么读?

优先逐行读取或分块读取,不要一次性全部读入内存。

接口请求很慢怎么办?

先加 timeout 和日志,确认是网络等待还是服务端慢,再考虑并发和重试策略。

Python 实用

继续阅读

返回专题