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.
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.
A comment in bpo-15500 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 |
---|---|
pip install namedthreads
Run this as early as possible in your code:
import namedthreads
namedthreads.patch()
Inspired by Graham Dumpleton's autowrapt, this module can
be activated automatically. Due to the hacky nature
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