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

如何用Python PIL高效读取Google Cloud Storage文件夹中的图片?

高效读取GCS文件夹图片的优化方案

Asyncio的可行性说明

之前关于GCS不支持asyncio的说法不准确,目前有两种可靠的异步实现方式:

  • gcsfs提供了AsyncGCSFileSystem异步接口,专门用于异步文件操作
  • Google官方google-cloud-storage客户端(2.0及以上版本)也支持异步调用

以下是使用gcsfs异步读取的示例代码:

import asyncio
from gcsfs import AsyncGCSFileSystem
from PIL import Image
import io

async def load_image(gcs, path):
    async with gcs.open(path, 'rb') as f:
        img_data = await f.read()
    return Image.open(io.BytesIO(img_data)).convert('RGB')

async def batch_load_images():
    gcs = AsyncGCSFileSystem(project=PROJECT, token=ADC_JSON_PATH)
    all_paths = await gcs.ls(GCS_FOLDER)
    image_paths = [p for p in all_paths if p.endswith(('.jpeg', '.png'))]
    
    tasks = [load_image(gcs, path) for path in image_paths]
    images = await asyncio.gather(*tasks)
    return images

if __name__ == "__main__":
    images = asyncio.run(batch_load_images())

非异步场景的最快读取方案

如果不想引入异步代码的复杂度,多线程是IO密集型GCS读取的最优选择——Python的GIL在IO等待阶段会自动释放,多线程可并行利用等待时间提升效率。

多线程批量读取实现

from gcsfs import GCSFileSystem
from PIL import Image
from concurrent.futures import ThreadPoolExecutor
import io

def load_single_image(gcs, path):
    with gcs.open(path, 'rb') as f:
        img_data = f.read()
    return Image.open(io.BytesIO(img_data)).convert('RGB')

def load_images():
    gcs = GCSFileSystem(project=PROJECT, token=ADC_JSON_PATH)
    # 直接用glob匹配图片,省去手动过滤步骤
    image_paths = gcs.glob(f"{GCS_FOLDER}/**/*.{jpeg,png}")
    
    # 线程数可根据机器性能调整,建议设为CPU核心数的4-8倍
    with ThreadPoolExecutor(max_workers=16) as executor:
        images = list(executor.map(lambda p: load_single_image(gcs, p), image_paths))
    return images

额外优化细节

  • 路径匹配优化:使用gcs.glob直接匹配目标格式文件,比先列出所有文件再过滤更高效
  • 客户端复用:单个GCS客户端可在多线程中安全复用,无需重复初始化
  • 字节流处理:用io.BytesIO将文件内容读入内存后再传给PIL,减少磁盘IO开销
  • 线程数调整:根据网络带宽和机器CPU核心数调整max_workers,避免线程过多导致资源竞争

大规模文件场景补充

如果图片数量达到上万级,可考虑多进程+多线程混合模式:用多进程拆分任务,每个进程内用多线程读取。注意GCS客户端在多进程中需要单独初始化,避免跨进程资源冲突。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 18:33:20