Действительно жизненный факт, что многопоточное использование Qt (и других богатых фреймворков) является деликатной и сложной работой, требующей явного внимания и осторожности - см. Документы Qt для превосходного охвата тема (для читателей, имеющих опыт работы с потоками в целом, с рекомендуемыми чтениями для тех, кто еще нет).
Если возможно, я бы предложил то, что я всегда предлагаю, в качестве самой надежной архитектуры для потоков в Python: пусть каждая подсистема принадлежит и используется одним выделенным потоком; общаться между потоками через экземпляры Queue.Queue
, то есть путем передачи сообщений. Этот подход может быть немного ограничительным, но он обеспечивает хорошую основу для конкретных и тщательно спроектированных исключений (основанных на пулах потоков, случайных порождаемых новых потоках, блокировках, переменных условий и других подобных привередливых вещах ;-). В последней категории я бы также классифицировал специфичные для Qt вещи, такие как межпотоковая связь сигнал / слот через соединения в очереди .