https://github.com/beniwohli/namedthreads
Patch to propagate Python thread names to system thread names
https://github.com/beniwohli/namedthreads
debugging python python-3 threading
Last synced: 11 months ago
JSON representation
Patch to propagate Python thread names to system thread names
- Host: GitHub
- URL: https://github.com/beniwohli/namedthreads
- Owner: beniwohli
- License: bsd-3-clause
- Created: 2019-04-08T14:58:54.000Z (about 7 years ago)
- Default Branch: master
- Last Pushed: 2022-06-30T12:15:13.000Z (almost 4 years ago)
- Last Synced: 2025-07-24T05:38:04.578Z (11 months ago)
- Topics: debugging, python, python-3, threading
- Language: Python
- Size: 6.84 KB
- Stars: 1
- Watchers: 0
- Forks: 1
- Open Issues: 2
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# namedthreads

This is a hack to propagate thread names set in Python to the system.
*WARNING*: This is only meant for testing/debugging purposes. Do *NOT* run in production.
## The problem
You can name threads in Python like so:
import threading
my_thread = threading.Thread(target=my_func, name="my-thread")
But when running `ps`, `top` and similar, you'll notice that the thread name isn't visible in these tools,
making threading bugs somewhat harder to debug.
## The solution
A comment in [bpo-15500](https://bugs.python.org/issue15500#msg230736) lines out a monkeypatch that uses `ctypes` to set the name using `libpthread.pthread_setname_np`.
While this works beautifully, it hasn't been included in core python due to compatibility reasons. This module packages the monkeypatch in an easy to install package.
| *Before* | *After* |
|--------------------------------------------|-------------------------------------------|
|||
## Usage
### Install
pip install namedthreads
### Manual patching
Run this as early as possible in your code:
import namedthreads
namedthreads.patch()
### Automatic patching
Inspired by Graham Dumpleton's [autowrapt](https://github.com/GrahamDumpleton/autowrapt), this module can
be activated automatically. Due to the [hacky nature](http://blog.dscpl.com.au/2015/04/automatic-patching-of-python.html)
of this approach, it is guarded by checking the presence of an environment variable, `NAMEDTHREADS`.
Automatic patching is only activated if this environment variable is set
NAMEDTHREADS=1 python myscript.py