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

Python多进程Pool返回IMapIterator对象而非整数结果如何解决

问题修复说明

核心问题点

  • pool.imap()参数使用错误:第一个参数需要传入未执行的函数对象,你写的rolldie()是直接调用函数后返回的整数,不符合要求;第二个参数要求传入可迭代对象,你传入整数0格式错误。
  • imap()本身返回的是IMapIterator迭代器对象,必须遍历迭代器才能获取实际的执行结果,直接将迭代器存入列表打印就会输出对象地址。
  • 原有写法循环100次调用imap完全没有发挥多进程的优势,属于错误的进程池使用姿势,且if __name__ == '__main__'的位置不符合多进程模块在Windows系统下的运行要求。

修复后可直接运行的代码

import random
from multiprocessing import Pool

def rolldie(_): # 占位参数,用于接收map方法传入的迭代值
    # 1 = 正面,2 = 反面
    return random.randint(1,2)

if __name__ == '__main__':
    def main():
        pool = Pool()
        # 一次性提交100次任务,map会自动返回所有结果组成的列表
        out = pool.map(rolldie, range(100))
        # 进程池标准收尾操作,避免资源泄漏
        pool.close()
        pool.join()
        return out
    
    print(main())

可选:用imap逐次获取结果的写法

如果你需要边执行边拿结果,就用imap遍历迭代器即可:

if __name__ == '__main__':
    def main():
        out = []
        pool = Pool()
        # 遍历imap返回的迭代器,逐次拿到每次抛硬币的结果
        for res in pool.imap(rolldie, range(100)):
            out.append(res)
        pool.close()
        pool.join()
        return out
    
    print(main())

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 18:27:05