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

如何使用Python多进程池.starmap_async()运行多个函数并获取全部结果

问题原因与修复方案

核心问题排查

  • 缩进错误:你当前代码中result.get()的调用逻辑放在了if __name__ == '__main__'代码块之外。Windows系统下Python多进程默认采用spawn启动模式,子进程会重新导入整个执行脚本,不在main判断块内的代码会在子进程导入时被意外执行,直接导致变量作用域混乱、结果获取逻辑异常。
  • 迭代器耗尽:如果你的args是生成器、迭代器这类仅支持单次遍历的对象,第一次传给starmap_async时已经完成了全量遍历,第二次传入时已经为空,scatterfunc2没有参数可执行自然返回空结果。

修正后代码

from multiprocessing.pool import Pool 
import numpy as np

# 你的自定义函数
def scatterfunc1(*params):
    # 原有逻辑
    pass

def scatterfunc2(*params):
    # 原有逻辑
    pass

if __name__ == '__main__':
    # 先将args转为列表,避免一次性迭代器耗尽问题
    args = list(args)
    pool = Pool()
    result1_async = pool.starmap_async(scatterfunc1, args)
    result2_async = pool.starmap_async(scatterfunc2, args)
    
    # 结果获取逻辑必须放在main块内
    result1 = np.asarray(result1_async.get(), dtype = float)
    result2 = np.asarray(result2_async.get(), dtype = float)
    
    # 回收进程池资源
    pool.close()
    pool.join()
    
    # 后续可正常使用两个结果
    print(result1.shape, result2.shape)

额外排查建议

如果调整后仍有异常,可以单独运行scatterfunc2的异步调用,排查函数本身是否存在无返回值、参数不匹配的逻辑问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 19:54:02