Есть ли способ узнать, используются ли когда-либо блокировки потоков Python более чем одним потоком?

#python #python-3.x #multithreading #python-multithreading

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

Вопрос:

Я работаю над личным проектом, который несколько раз подвергался рефакторингу. Сначала он использовал многопоточность, затем его части использовали asyncio, и теперь он вернулся к тому, чтобы быть в основном однопоточным.

В результате всех этих изменений у меня есть несколько потоков.Lock() в коде, который я хотел бы удалить и очистить, чтобы предотвратить будущие проблемы.

Как я могу легко определить, какие блокировки используются и попадают в более чем один поток во время выполнения приложения?

Ответ №1:

Если бы я оказался в ситуации, чтобы выяснить это, я бы попытался заменить блокировку оболочкой, которая выполняет подсчет (или печатает что-то, Создает исключение и т. Д.) Для меня, Когда произошло нежелательное поведение. Python взломан, поэтому я могу просто создать функцию и перезаписать оригинал threading.Lock , чтобы выполнить работу. Для этого может потребоваться некоторая тщательная реализация, например, перехват всех возможных путей блокировки и разблокировки.

Однако вы должны быть осторожны, что даже в этом случае вы можете не использовать весь возможный путь кода и, следовательно, никогда не узнаете, действительно ли вы удалили все «ошибки».

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

1. Я подумал о подклассе threading . Блокировка с помощью счетчика для каждого потока, но надеялся, что там будет какой-то инструмент, который поможет. Если это так, что реализация вручную — единственный способ, то пусть будет так.