При использовании threading и изменении, например, значения label в потоках (счетчик, который на +1 увеличивается и т.д.) - могут ведь возникнуть ситуации, когда 2 потока одновременно прибавят к 1 числу и в итоге число изменится на +1, а не на +2?
А если использовать QThread, то такого не будет, верно?
И еще бы какой-нибудь нормальный пример для QThread, на создание потока, передачу в него функции и аргументов к ней... нужно ли для завершения потоков что-то писать, или они сами завершаются, когда функция закончит выполнение?
ведь я так понял, нельзя, как в threading, просто запустить поток QThread с target=функция, args=аргументы, и всё
QThread - это просто интерфейс к потоку операционной системы, так же как питонячий Thread. Оба они одинаково приводят к гонкам, взаимоблокировкам и тому подобному. И компоненты графического интерфейса не являются потокобезопасными, попытка обращаться к ним из разных потоков может привести к крашу приложения и его непредсказуемому поведению.
Ivan Yakushenko, то есть то, что везде пишут о том, что если в потоках идет работа с интерфейсом - то надо использовать QThread -- это не относится к проблеме синхронизации обновления интерфейса?
типо QThread это не решит и все равно надо использовать Lock() и подобное?
TemaKam, потоки нужно использовать для того, что бы интерфейс не блокировался во время операций, если есть необходимость взаимодействовать с одним объектом, то да, используй блокировки.
TemaKam, надо использовать QThread, но с интерфейсом из него взаимодействовать не надо. Если нужно что-то отобразить в окне, то код выполняющийся в потоке должен отправить сигнал коду главного потока, который уже может беспрепятственно работать с окном.