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

Python使用multiprocessing实现for循环并发执行的问题求解

问题原因分析
  • 第一版代码错误原因:你在第一次for循环迭代时就调用了pool.close()和pool.join()关闭了进程池,第二次循环再向已关闭的进程池提交任务,就会触发Pool is still running的报错。
  • 第二版代码空白无输出的常见原因:
    1. 每次循环都重新创建、销毁进程池,进程池创建开销极大,循环10000次的资源消耗会直接阻塞程序运行
    2. Windows平台下没有添加多进程启动的入口守卫if __name__ == '__main__',会导致进程无限递归启动,无法正常执行任务
正确实现代码
import multiprocessing as mp

# 你的三个业务函数,替换为自身实现即可
def function1(bid, ask):
    print(f"func1执行,bid={bid}, ask={ask}")

def function2(bid, ask):
    print(f"func2执行,bid={bid}, ask={ask}")

def function3(bid, ask):
    print(f"func3执行,bid={bid}, ask={ask}")

if __name__ == '__main__':
    # 进程池全局仅初始化一次,避免重复创建的开销
    pool = mp.Pool(mp.cpu_count())
    # 按需求遍历i的范围,需要10000次就修改range参数即可
    for i in range(0, 1000):
        bid = i
        ask = i
        # 提交3个异步任务,保存返回的任务对象
        tasks = [
            pool.apply_async(function1, args=(bid, ask,)),
            pool.apply_async(function2, args=(bid, ask,)),
            pool.apply_async(function3, args=(bid, ask,))
        ]
        # 等待当前i对应的所有任务全部执行完成,再进入下一轮循环
        for t in tasks:
            # 需要获取函数返回值就用t.get(),不需要返回值用t.wait()也可以
            t.wait()
    # 所有循环全部执行完成后再关闭进程池
    pool.close()
    pool.join()
实现说明
  • 进程池仅初始化一次,避免了重复创建销毁的额外性能开销
  • 每次提交当前i对应的3个任务后,通过等待所有任务对象执行完成,严格保证不会提前进入下一轮循环
  • 入口守卫if __name__ == '__main__'是Python多进程在Windows平台运行的强制要求,缺少该配置会直接导致程序无法正常执行

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 13:45:03