Python多进程中使用apply_async为何无法执行函数?
解决Python多进程Pool无控制台输出的问题
核心原因
子进程的print输出默认采用缓冲机制,在IPython这类交互式环境中,缓冲的输出大概率无法被及时渲染到控制台;另外异步调用的特性也可能导致输出未被捕获。
可行解决方案
强制刷新输出缓冲
修改print语句添加flush=True参数,直接绕过缓冲区限制:from multiprocessing import Pool def function1(var1, var2): print("function1 executing", flush=True) var3 = var1 + var2 return var3 if __name__ == "__main__": pool = Pool() pool.apply_async(function1, args=(7, 5)) pool.close() pool.join()改用同步调用方法
放弃异步,使用pool.apply()同步执行,等待子进程完成后输出会自然显示:from multiprocessing import Pool def function1(var1, var2): print("function1 executing") var3 = var1 + var2 return var3 if __name__ == "__main__": pool = Pool() pool.apply(function1, args=(7, 5)) pool.close() pool.join()捕获异步调用结果
apply_async返回的AsyncResult对象调用get()方法会等待子进程结束,同时触发输出:from multiprocessing import Pool def function1(var1, var2): print("function1 executing") var3 = var1 + var2 return var3 if __name__ == "__main__": pool = Pool() result = pool.apply_async(function1, args=(7, 5)) print("计算结果:", result.get()) pool.close() pool.join()切换到普通命令行运行
若当前使用IPython或Jupyter环境,直接在系统终端(cmd/Shell)中执行脚本,子进程输出通常能正常显示。
内容的提问来源于stack exchange,提问作者Wurstlaster
相关产品推荐
相关产品推荐

