Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Errors shown under wrong cell using magics #893

Closed
piotrszajer opened this issue Sep 10, 2024 · 2 comments · Fixed by #905
Closed

Errors shown under wrong cell using magics #893

piotrszajer opened this issue Sep 10, 2024 · 2 comments · Fixed by #905

Comments

@piotrszajer
Copy link

piotrszajer commented Sep 10, 2024

Hi, I'm facing an issue where Traceback is shown under first cell, where IPyParallel is defined, not under the actual cell in which error was raised.

Steps to reproduce:

  1. Terminal 1
pip install jupyter ipyparallel
ipcluster nbextension enable
jupyter server extension enable ipyparallel
ipcluster start --n=1
  1. Terminal 2
jupyter notebook
  1. Create new notebook
  2. Cell 1: import this -> works fine
  3. Cell 2:
import ipyparallel as ipp
rc = ipp.Client()
dview = rc[:]

-> works fine
6. Cell 3:

%%px
import os
print(f"Hello from engine {os.getpid()}")

-> works fine
7. Cell 4:

1/0

-> Traceback is printed under cell 2

What's more, further execution of cell 4 results in adding Traceback under cell 2, when cell 2 is re-run then Traceback stopped to show.

Screenshot from 2024-09-10 21-17-48
Screenshot from 2024-09-10 21-18-00
Screenshot from 2024-09-10 21-18-11

BugReproduce.zip

Additional: %pxresult shows Traceback in cell were it was executed

Any idea how to overcome it?

@piotrszajer piotrszajer changed the title Errors shown under wrong cell using magics [BUG] Errors shown under wrong cell using magics Sep 12, 2024
@piotrszajer piotrszajer changed the title [BUG] Errors shown under wrong cell using magics Errors shown under wrong cell using magics Sep 12, 2024
@minrk
Copy link
Member

minrk commented Oct 30, 2024

Thanks for reporting! This is fixed by #905

If you need a workaround today, you can do the same thing with some private API calls:

import sys
from threading import current_thread


def _detach_thread_output(rc):
    thread_ident = current_thread().ident
    for stream in [sys.stdout, sys.stderr]:
        for name in ("_thread_to_parent", "_thread_to_parent_header"):
            mapping = getattr(stream, name, None)
            if mapping:
                mapping.pop(thread_ident, None)

rc._io_loop.add_callback(_detach_thread_output, rc)

@piotrszajer
Copy link
Author

@minrk Thank you very much :)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging a pull request may close this issue.

2 participants