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

无输入参数的函数可使用哪些方法实现并行?求对应代码示例

无参函数多进程并行实现方案

你当前的写法存在几个错误:

  1. starmap方法要求传入第二个参数为参数元组的可迭代对象,直接只传函数名会触发参数缺失报错
  2. starmap是同步阻塞方法,调用后会直接等待所有进程执行完毕并返回结果列表,不需要也不能调用start()、join(),这两个API属于multiprocessing.Process实例,和进程池的map类方法无关

可使用的实现方法

方法1:用apply_async批量提交无参任务

适合不需要严格按提交顺序返回结果的场景,用法灵活:

import multiprocessing as mp

def calculate():
    # 你的业务逻辑
    return 42

if __name__ == '__main__':
    # 定义要并行执行的calculate任务数量
    task_count = 10
    # 创建进程池,默认大小等于CPU核心数
    pool = mp.Pool()
    # 批量提交无参任务
    async_results = [pool.apply_async(calculate) for _ in range(task_count)]
    # 等待所有任务执行完成并获取结果
    final_results = [res.get() for res in async_results]
    # 关闭进程池释放资源
    pool.close()
    pool.join()
    print(final_results)

方法2:用starmap/map适配无参函数

适合需要按提交顺序返回结果的场景,只需要构造空参数的可迭代序列即可适配:

import multiprocessing as mp

def calculate():
    return 42

if __name__ == '__main__':
    task_count = 10
    pool = mp.Pool()
    # 传入由空元组组成的可迭代对象,每个空元组对应一次无参调用
    final_results = pool.starmap(calculate, [() for _ in range(task_count)])
    pool.close()
    pool.join()
    print(final_results)

如果使用map方法,可以加一层占位参数的包装:

final_results = pool.map(lambda _: calculate(), range(task_count))

方法3:直接创建Process实例启动

适合任务数量少、不想使用进程池的场景:

import multiprocessing as mp

def calculate(result_queue):
    res = 42
    # 通过队列传递返回结果
    result_queue.put(res)

if __name__ == '__main__':
    task_count = 10
    res_queue = mp.Queue()
    # 批量创建进程
    processes = [mp.Process(target=calculate, args=(res_queue,)) for _ in range(task_count)]
    # 启动所有进程
    for p in processes:
        p.start()
    # 等待所有进程执行完毕
    for p in processes:
        p.join()
    # 读取所有返回结果
    final_results = [res_queue.get() for _ in range(task_count)]
    print(final_results)

注意:Windows平台下必须添加if __name__ == '__main__'守卫,否则多进程启动会触发递归报错。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 07:57:04