如何实现从ipyparallel引擎向主进程打印输出?
如何在ipyparallel中从引擎向主进程打印内容
没问题!ipyparallel的引擎作为独立的工作进程,默认情况下它们的print输出会被缓存,不会直接显示在主进程的控制台里。不过有两种简单的方式可以解决这个问题:
方法1:实时转发引擎输出(推荐)
在创建ipp.Client实例时加上redirect_output=True参数,这样引擎里的所有标准输出(包括print的内容)都会实时转发到主进程的控制台(不管是终端还是Jupyter Notebook)。
修改后的完整代码:
import ipyparallel as ipp import os # 启用输出转发,让引擎的print实时显示在主进程 rc = ipp.Client(redirect_output=True) dview = rc[:] v = rc.load_balanced_view() v.block = True v.map(os.chdir, [os.getcwd()] * len(v)) @v.parallel(block=True) def my_parallel_function(idp): print(f"I want to print something here from task {idp}") return idp+1 # 运行后,你会实时看到每个引擎的print内容 my_parallel_function(range(10))
方法2:任务完成后统一获取输出
如果你不需要实时看到输出,只想在所有并行任务结束后一次性查看,可以在任务执行完毕后,通过dview.stdout拉取所有引擎的输出内容并打印。
代码示例:
import ipyparallel as ipp import os rc = ipp.Client() dview = rc[:] v = rc.load_balanced_view() v.block = True v.map(os.chdir, [os.getcwd()] * len(v)) @v.parallel(block=True) def my_parallel_function(idp): print(f"I want to print something here from task {idp}") return idp+1 # 先执行并行任务 results = my_parallel_function(range(10)) # 拉取并打印所有引擎的输出 for engine_output in dview.stdout: print(engine_output.strip())
这两种方法都能帮你获取引擎里的print内容,根据你的需求选就行~
内容的提问来源于stack exchange,提问作者Borreguin Sanchez
相关产品推荐
相关产品推荐

