#python #python-3.x #multithreading #python-multithreading
#python #python-3.x #многопоточность #python-многопоточность
Вопрос:
Я работаю над личным проектом, который несколько раз подвергался рефакторингу. Сначала он использовал многопоточность, затем его части использовали asyncio, и теперь он вернулся к тому, чтобы быть в основном однопоточным.
В результате всех этих изменений у меня есть несколько потоков.Lock() в коде, который я хотел бы удалить и очистить, чтобы предотвратить будущие проблемы.
Как я могу легко определить, какие блокировки используются и попадают в более чем один поток во время выполнения приложения?
Ответ №1:
Если бы я оказался в ситуации, чтобы выяснить это, я бы попытался заменить блокировку оболочкой, которая выполняет подсчет (или печатает что-то, Создает исключение и т. Д.) Для меня, Когда произошло нежелательное поведение. Python взломан, поэтому я могу просто создать функцию и перезаписать оригинал threading.Lock
, чтобы выполнить работу. Для этого может потребоваться некоторая тщательная реализация, например, перехват всех возможных путей блокировки и разблокировки.
Однако вы должны быть осторожны, что даже в этом случае вы можете не использовать весь возможный путь кода и, следовательно, никогда не узнаете, действительно ли вы удалили все «ошибки».
Комментарии:
1. Я подумал о подклассе threading . Блокировка с помощью счетчика для каждого потока, но надеялся, что там будет какой-то инструмент, который поможет. Если это так, что реализация вручную — единственный способ, то пусть будет так.