前提:Jupyter已部署到云服务器,且在服务器端一直保持可连接的活跃状态。
原理分析:
实际上,Jupyter中笔记本文件的计算与显示是分开的,计算部分在服务器端进行,显示部分则由浏览器进行获取和解析。
当我们启动并运行一个笔记本时,除非程序执行结束,或者我们手动终止,其计算部分不会因为浏览器或者标签页的关闭而被迫终止,简单的说,笔记本的运行本来就是在后台长期执行的。但是当我们关闭浏览器的标签页后,再访问该笔记本却得不到正常的输出内容,单元块的状态也不会显示正在执行。
原因是笔记本文件中的计算内核运行在服务器端,执行程序后输出的消息是由内核产生的,而浏览器端负责解析并显示内核所输出的消息,因此当浏览器未连接时,任何输出信息都会丢失。另外,重新启动浏览器访问笔记本时,浏览器端保存的信息也不足以恢复接收输出。所以造成程序确实在后台运行,但浏览器端不能正常显示及时的输出。(官方仍未解决此问题)
折衷解决浏览器端显示问题的方法:
使用捕捉输出的魔术方法保存输出,当程序执行完成后,再调用对应方法查看其保存的输出信息。
简单演示:
判断当前程序是否执行完毕(此状态与浏览器状态无关)
只有当长耗时任务结束后才可查看魔术方法保存的输出结果。