Что делает waiter.acquire() в потоковой обработке?

#python #multithreading #python-multithreading

#python #многопоточность #python-многопоточность

Вопрос:

Я выполняю некоторую отладку процессора и просматриваю тепловую карту кода из vprof.

введите описание изображения здесь

Темно-зеленая подсветка указывает на высокую загрузку процессора.

Что делает строка и когда она вызывается? Это из lock.acquire() ? Или это что-то от создания или объединения потоков?

Мой скрипт создает threading.Thread() и использует некоторые глобальные блокировки.

Комментарии:

1. IIRC, получение блокировки = присоединение к потоку. Вся загрузка процессора подпотоком не учитывается в основном потоке, но при объединении вам все равно придется дождаться его завершения = в конечном итоге вы увидите эффект здесь. Например, если вы выполняете join () и для завершения подпотока требуется 10 секунд, основной поток ожидает 10 секунд получения блокировки. Чтобы действительно выяснить, почему это занимает так много времени, вам пришлось бы профилировать сам поток. Я не эксперт в потоковой обработке, так что, возможно, это не так, но недавно я столкнулся именно с такой ситуацией.