You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python3图片下载脚本运行数小时后意外终止问题求助

解决Python图片下载脚本运行数小时后意外终止的问题

咱们先拆解下可能导致脚本崩溃的核心原因,再一步步优化你的代码——毕竟长时间运行的网络脚本,最容易栽在未处理的异常和资源泄漏上:

1. 你的脚本存在的几个隐患

  • 没有异常捕获机制:网络请求随时可能遇到超时、链接失效、服务器报错,这些情况会直接抛出异常终止整个脚本
  • 文件资源未正确释放:open(filename,"wb").write(image)这种写法,虽然Python会自动回收,但长时间运行后可能积累未释放的文件句柄,导致资源耗尽
  • 无请求超时设置:遇到服务器无响应时,请求会一直挂着,甚至引发脚本卡住崩溃
  • 没有错误日志:出问题后完全不知道是哪一步、哪条数据导致的,根本没法定位

2. 优化后的稳定版脚本

我给你调整了脚本,加上了异常捕获、超时控制、资源自动管理和错误日志,就算出问题也能精准排查:

import csv
import requests
import logging
import time

# 配置错误日志,把问题记录到文件里,方便事后排查
logging.basicConfig(
    filename='download_errors.log',
    level=logging.ERROR,
    format='%(asctime)s - %(levelname)s - %(message)s'
)

print('download.py map 3_new')

with open('3.csv') as csvfile:
    csvrows = csv.reader(csvfile, delimiter=';', quotechar='"')
    row_counter = 0  # 加个计数器,方便定位出错的行
    for row in csvrows:
        row_counter += 1
        try:
            # 先判断行数据是否完整,避免索引错误
            if len(row) < 2:
                raise ValueError("行数据不完整,缺少文件名或URL")
                
            filename = row[0]
            url = row[1]
            
            # 设置10秒超时,避免请求一直挂着
            result = requests.get(url, stream=True, timeout=10)
            result.raise_for_status()  # 主动抛出HTTP错误(比如404、500)
            
            # 用with语句自动关闭文件,避免资源泄漏
            with open(filename, "wb") as img_file:
                img_file.write(result.raw.read())
            
            print(f"✅ 成功下载: {filename} (第{row_counter}条)")
            # 可选:加个1秒间隔,避免频繁请求被服务器封禁
            time.sleep(1)
        
        except Exception as e:
            error_info = f"❌ 第{row_counter}条失败 - 文件名: {row[0] if len(row)>=1 else '空'}, URL: {row[1] if len(row)>=2 else '空'}, 错误原因: {str(e)}"
            print(error_info)
            logging.error(error_info)
            # 遇到错误继续执行下一个,不要终止整个脚本
            continue

3. 额外排查建议

  • 运行脚本时留意控制台的错误输出,或者查看生成的download_errors.log文件,就能知道具体是哪条数据、什么原因导致的崩溃
  • 检查3.csv里的行是否有格式错误,比如空行、只有一列数据的情况
  • 如果服务器限制请求频率,可以适当延长time.sleep()的间隔时间

内容的提问来源于stack exchange,提问作者Antonio

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.13 07:21:29