Ошибка потока в Python & PyQt - PullRequest
       17

Ошибка потока в Python & PyQt

2 голосов
/ 16 сентября 2009

Я заметил, что когда функция setModel выполняется в параллельном потоке (я пробовал threading.Timer или threading.thread), я получаю это:

QObject: Cannot create children for a parent that is in a different thread.
(Parent is QHeaderView(0x1c93ed0), parent's thread is QThread(0xb179c0), current thread is QThread(0x23dce38)
QObject::startTimer: timers cannot be started from another thread
QObject: Cannot create children for a parent that is in a different thread.
(Parent is QTreeView(0xc65060), parent's thread is QThread(0xb179c0), current thread is QThread(0x23dce38)
QObject::startTimer: timers cannot be started from another thread

Есть ли способ решить эту проблему?

Ответы [ 2 ]

5 голосов
/ 17 сентября 2009

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

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

0 голосов
/ 16 сентября 2009

Похоже, вы попали в ограничение Qt. Попробуйте использовать сигналы или события, если вам нужны объекты для связи между потоками.

Или спросите об этом народ Qt. Это не похоже на PyQt.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...