Hacktoberfest 2026: die Issues, die Maintainer für den Oktober markiert haben – offen und einsteigerfreundlich. Hacktoberfest-Issues durchsuchen

Log messages written from a helper thread appear in the wrong notebook cell (regression)

Offen
#1,491 1 Kommentar 0 Reaktionen 0 zugewiesene Personen Auf GitHub ansehen

Maintainer antworten meist innerhalb von 1 Tag

Dieses Issue hat noch niemand übernommen.

Bewertung

Schwierigkeit
4/5
Geschätzter Aufwand
3-5 Tage
Anfängerfreundlichkeit
58/100
Issue-Typ
Bug
Klarheit
Größtenteils klar
Aktivitätsstatus
Aktiv
Tech-Stack
jupyter, jupyter-notebook, python
Bereich
backend

Rechercherichtung

Führen Sie das minimale Beispiel mit drei Zellen mit ipykernel 6.28.0 und 6.29.0 aus und konzentrieren Sie sich dabei auf Logger.write_from_queue, Logger.log und den sys.stderr-Sink. Verfolgen Sie, wie die Ausgabe des Hilfsthreads den Notebook-Zellen zugeordnet wird. Als erledigt gilt die Aufgabe, wenn Nachrichten aus Zelle 3 und späteren Zellen in der jeweils zuständigen Zelle statt in der Zelle erscheinen, in der der Logger initialisiert wurde.

Vom Indexierungsmodell aus dem Issue-Text verfasst.

Beschreibung

I recently found that, with some configurations, log messages emitted by Loguru would appear in the wrong Jupyter notebook cell: namely, the cell that initialized the logger, rather than the cell that was responsible for the log message. I opened Delgan/loguru#1427 to address this, but have since closed it, since the issue appears to be a regression in ipykernel, not in Loguru itself.

The problem appears for all versions of Loguru, but only for ipykernel >= 6.29. It is confined to the case where the logger is configured to write messages using a separate helper thread, which is useful when logging from multiple threads simultaneously. A minimal working example that illustrates the issue without the use of Loguru is the following:

(cell 1)

import sys
import multiprocessing
import threading

class Logger:
    def __init__(self, sink):
        self.sink = sink
        self.queue = multiprocessing.SimpleQueue()
        self.lock = threading.Lock()
        self.thread = threading.Thread(target=self.write_from_queue, daemon=True)
        self.thread.start()

    def write_from_queue(self):
        while True:
            message = self.queue.get()
            with self.lock:
                self.sink.write(message)

    def log(self, message):
        self.queue.put(message)

(cell 2)

logger = Logger(sink=sys.stderr)

(cell 3)

logger.log("a message")

With ipykernel 6.28.0, the log message appears under cell 3, as intended, but with 6.29.0, it appears under cell 2 instead, and subsequent messages logged using the same logger will always appear under cell 2.

(Note: I tested with Jupyter Notebook 7.5.0 and Python 3.12.11 on Ubuntu 24.04.)

Vorherrschende Sprache
Python
Sterne
734
Forks
411
Ø Merge
1 T. 11 Std.
Gemergte PRs (30 T.)
12

Entwicklungsumgebung

Erste Schritte

  1. Lesen Sie das ganze Issue und danach den Beitragsleitfaden des Projekts.
  2. Schreiben Sie ins Issue, dass Sie es übernehmen — das erspart doppelte Arbeit.
  3. Forken Sie das Repository und arbeiten Sie in einem Branch.
  4. Öffnen Sie einen Pull Request, der die Issue-Nummer nennt.

Mehr aus ipython/ipykernel

Alle Issues in ipython/ipykernel

Ähnliche Issues

Weitere Issues zu Python

Neue Issues direkt in Ihr Postfach

Eine kurze Übersicht über anfängerfreundliche GitHub-Issues.