Необходимо в реалтайме отслеживать каждый поток python-процесса.
В Python'е есть возможность задать имя потока:
Thread(name='Test')
И в htop есть возможность отображать пользовательские имена потоков (F2 -> Display options -> Show custom thread names).
Но пользовательские имена потоков все равно не отображаются. Вместо них указано название интерпретатора.
Подскажите, где я неправ? Может быть есть другие средства мониторинга каждого потока процесса?
Спасибо!
Ответ
В классе Thread аргумент name служит только для нужд самого python, например когда вы делаете print.
Для установки имени нужно вызвать prctl:
import time
from threading import Thread
def set_name(name):
from ctypes import cdll, byref, create_string_buffer
libc = cdll.LoadLibrary('libc.so.6')
buff = create_string_buffer(len(name)+1)
buff.value = name
libc.prctl(15, byref(buff), 0, 0, 0)
def test():
set_name(b'SomeThread')
while True:
time.sleep(1)
t = Thread(target=test, name='TestName')
print(t)
t.start()
В htop будет вот так (запускал из ipython, поэтому есть еще другие thread без имени):
Комментариев нет:
Отправить комментарий