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

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

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

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

1 Ответ

1 голос
/ 18 апреля 2019

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

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

...