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

Python多进程计算文件大小求助:使用Pool后size始终为0

问题解决:多进程并行计算文件大小后size始终为0

问题原因

multiprocessing的子进程会复制父进程中的对象,你在子进程里调用calculate_size()修改的是对象副本的size属性,父进程中的原对象完全不受影响,所以最后所有实例的size还是初始值0。

解决步骤

  1. 先修正F类的语法错误:calculate_size方法缺少self参数,否则根本无法调用。
  2. 不要直接在子进程中修改实例属性,改为通过独立函数计算文件大小并返回(路径+大小),再在父进程中将结果赋值给对应实例。

完整代码示例

import multiprocessing

class F:
    def __init__(self, path):
        self.path = path
        self.size = 0

    # 修正后的实例方法(也可以不用这个方法,直接用下面的独立函数)
    def calculate_size(self):
        with open(self.path, "rb") as f:
            self.size = len(f.read())

# 独立的计算函数,接收文件路径,返回路径和对应大小
def compute_file_size(path):
    with open(path, "rb") as f:
        return path, len(f.read())

if __name__ == "__main__":
    # 假设fails是F类实例的列表
    fails = [F("file1.txt"), F("file2.txt"), F("file3.txt")]

    # 使用Pool并行计算
    with multiprocessing.Pool() as pool:
        # 提取所有文件路径,传入计算函数
        results = pool.map(compute_file_size, [fail.path for fail in fails])

    # 将计算结果赋值给对应的F实例
    # 用路径映射实例,避免嵌套循环提升效率
    file_map = {fail.path: fail for fail in fails}
    for path, size in results:
        file_map[path].size = size

    # 验证结果
    for fail in fails:
        print(f"文件 {fail.path} 的大小: {fail.size} 字节")

内容的提问来源于stack exchange,提问作者Анастасия Белоусова

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 14:01:12