Pregunta

Me di cuenta de que cuando la función setModel se ejecuta en hilo paralelo ( Intenté threading.Timer o threading.thread), obtengo esto:

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

¿Hay alguna forma de resolver esto?

¿Fue útil?

Solución

De hecho, es una realidad que el uso multiproceso de Qt (y otros marcos enriquecidos) es un trabajo delicado y difícil, que requiere atención y cuidado explícitos; consulte Documentos de Qt para una excelente cobertura del tema (para lectores con experiencia en hilos en general, con lecturas sugeridas para aquellos que aún no lo son).

Si es posible, sugeriría lo que siempre sugiero como la arquitectura más sólida para enhebrar en Python: deje que cada subsistema sea propiedad y se use por un solo hilo dedicado; comunicarse entre hilos a través de instancias de Queue.Queue , es decir, al pasar el mensaje. Este enfoque puede ser un poco restrictivo, pero proporciona una buena base sobre la cual se identifican excepciones cuidadosamente identificadas y cuidadosamente diseñadas (basadas en grupos de subprocesos, ocasionalmente se generan nuevos subprocesos, bloqueos, variables de condición y otras cosas delicadas ;-). En la última categoría, también clasificaría cosas específicas de Qt como la comunicación de señal / ranura entre hilos a través de conexiones en cola .

Otros consejos

Parece que te has topado con una limitación de Qt allí. Intente usar señales o eventos si necesita objetos para comunicarse a través de hilos.

O pregúntale a la gente Qt sobre esto. No parece específico de PyQt.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top