ipython / ipython/ipykernel

object_inspect may call user-defined functions that wedge the kernel

Ouverte
#383 1 commentaire 0 réactions 0 personnes assignées Voir sur GitHub
Langage dominant
Python
Étoiles
734
Forks
412
Merge moyen
1 j 5 h
PR mergées (30 j)
8

Description

Actions that induce object inspection, e.g., shift-tab after a variable, may call user-defined functions that take a long time to complete. When that happens, the kernel is wedged. Subsequent code execution blocks waiting for the inspect reply, kernel interrupt doesn't unblock, meaning that a kernel process restart is required to proceed.

An example follows:
![slow_inspect](https://user-images.githubusercontent.com/151865/51767459-53843c80-2092-11e9-8042-24b5373e0cca.gif)

This example shows the back-to-back completion time for an object inspect triggered by shift-tab. I recorded the demo from a Jupyterlab frontend started on `try.jupyter.org`. The issue applies to vanilla Jupyter as well.

In this example, `Slow` is an object with a `__repr__` that takes 1 second. `__repr__` seems to be called multiple times during inspection, meaning that the end-to-end time to inspect an object with a 1 second `__repr__` is ~10 seconds.

Of course, increasing the `sleep` increases the delay.

I suspect there's a fundamental tradeoff between the information available in object inspection and reliability. To avoid becoming wedged, object inspection and code completion should avoid calling any user-defined functions. But, that will limit available information.

Guide de contribution

Ouvrir le guide de contribution

Évaluation

Cette issue n'a pas encore été évaluée.

Recevez les nouvelles issues par e-mail

Un résumé court des issues GitHub adaptées aux débutants.