문제

기능이있을 때 알았습니다 setModel 병렬 스레드에서 실행됩니다 (스레딩을 시도했습니다. 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

이것을 해결할 방법이 있습니까?

도움이 되었습니까?

해결책

QT (및 기타 풍부한 프레임 워크)의 멀티 스레드 사용 사용은 명백한 관심과 관리가 필요한 섬세하고 어려운 직업이라는 것은 실제로 삶의 사실입니다. QT의 문서 주제에 대한 탁월한 범위를 위해 (일반적으로 스레딩에서 경험 한 독자의 경우 아직 그렇지 않은 사람들을위한 제안 된 독서).

가능하다면, 나는 항상 파이썬에서 스레딩을위한 가장 건전한 아키텍처로 항상 제안하는 것을 제안합니다. 각 서브 시스템을 단일 전용 스레드에서 소유하고 사용하도록하십시오. 인스턴스를 통해 스레드를 전달합니다 Queue.Queue, 즉, 메시지 전달에 의해. 이 접근법은 약간 제한적 일 수 있지만, 구체적으로 식별되고 신중하게 구조 된 예외 (스레드 풀, 때때로 새로운 스레드, 잠금, 조건 변수 및 기타 까다로운 것들을 기반으로하는 좋은 기초를 제공합니다. 후자의 범주에서 나는 또한 크로스 스레드 신호/슬롯 커뮤니케이션과 같은 QT 특이 적 물건을 대기열 연결.

다른 팁

QT 제한을 한계에 걸린 것 같습니다. 스레드에서 통신 할 객체가 필요한 경우 신호 또는 이벤트를 사용해보십시오.

또는 QT 사람들에게 이것에 대해 물어보십시오. PYQT에만 국한되지 않는 것 같습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top