https://github.com/python/cpython/commit/48f82d766956bdf03b70ebbe25f4d5fd2b0ef1da
commit: 48f82d766956bdf03b70ebbe25f4d5fd2b0ef1da
branch: 3.14
author: Serhiy Storchaka <[email protected]>
committer: serhiy-storchaka <[email protected]>
date: 2026-08-13T10:28:14Z
summary:

[3.14] gh-154139: Document that curses is not thread-safe (GH-154173) 
(GH-155691)

Whether curses is thread-safe depends on the library and how it was built.
The blocking and refresh methods release the GIL, so with a non-reentrant
curses, unsynchronized use from several threads can crash.

The reference to window.use() and screen.use() is omitted: they were added
in 3.16.

(cherry picked from commit 1ed6b78232a8739aa3b1ee1ce7ce2e1d998e3607)

Co-authored-by: Claude Opus 5 (1M context) <[email protected]>

files:
M Doc/library/curses.rst

diff --git a/Doc/library/curses.rst b/Doc/library/curses.rst
index ca6b12ec5d61e4..614e2fa20d03da 100644
--- a/Doc/library/curses.rst
+++ b/Doc/library/curses.rst
@@ -34,6 +34,18 @@ Linux and the BSD variants of Unix.
    Whenever the documentation mentions a *character string* it can be specified
    as a Unicode string or a byte string.
 
+.. note::
+
+   Whether curses may be used from several threads
+   depends on the underlying library and how it was built.
+   In many implementations, including the default build of ncurses,
+   the screen state is shared and not thread-safe;
+   since the blocking and refresh methods
+   (such as :meth:`~window.getch` and :meth:`~window.refresh`)
+   release the :term:`GIL`,
+   unsynchronized use from several threads can then crash the interpreter.
+   Serialize the calls.
+
 .. seealso::
 
    Module :mod:`curses.ascii`

_______________________________________________
Python-checkins mailing list -- [email protected]
To unsubscribe send an email to [email protected]
https://mail.python.org/mailman3//lists/python-checkins.python.org
Member address: [email protected]

Reply via email to