Numba在Jupyter Notebook中打印缓冲,如何设置无缓冲输出?
Numba在Jupyter Notebook中打印缓冲问题的解决方法
在Jupyter环境下,被@numba.njit装饰的函数内部print输出会被缓冲,直到函数执行完毕或内核中断才一次性显示,而终端中正常实时输出——这是因为Jupyter的输出流默认采用块缓冲,和终端的行缓冲机制不同。以下是几种解决方式:
方法1:在Numba函数内强制刷新输出
利用Numba提供的底层运行时接口,每次print后强制刷新标准输出流:
import numba from numba.core.runtime import rtsys @numba.njit def test_print(): for i in range(100000): x = sum([j for j in range(i)]) if i % 10000 == 0: print("step") print(x) rtsys.set_flush_stdout(True) # 强制刷新输出缓冲区 test_print()
方法2:全局开启无缓冲输出
在Notebook开头执行魔法命令,全局设置Python无缓冲输出:
%env PYTHONUNBUFFERED=1
执行该命令后再运行你的Numba函数,所有输出都会实时刷新。
补充说明
终端中输出正常是因为终端属于交互式tty设备,默认采用行缓冲,输出换行时自动刷新;而Jupyter的输出流是非tty类型,默认使用块缓冲,只有当缓冲区填满或程序结束时才会输出内容。
内容的提问来源于stack exchange,提问作者Adam
相关产品推荐
相关产品推荐

