ipython / ipython/ipykernel

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

Ouverte
#1,491 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

I recently found that, with some configurations, log messages emitted by [Loguru](https://github.com/Delgan/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.)

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.