[PySide] Signal emitted on a worker thread not being received by main thread

William Dias william.dias at gmail.com
Mon Apr 8 23:59:09 CEST 2013


Hi, Tibold. Thanks for your reply.

If I first move my worker to the new thread and then make the connection
should it work?

According to the documentation, it would use an auto-connection and since
emitter and receiver don't have the same thread affinity, it would create a
queued connection. Is it right?

Best,


2013/4/8 Tibold Kandrai <kandraitibold at gmail.com>

> Hi,****
>
> ** **
>
> I think you’ll have to use queued connection when you connect the
> photoStatus signal to the photoStatus slot.****
>
> ** **
>
> See:****
>
>
> http://qt-project.org/doc/qt-4.8/threads-qobject.html#signals-and-slots-across-threads
> ****
>
> ** **
>
> Cheers,****
>
> Tibold****
>
> ** **
>
> *From:* pyside-bounces+kandraitibold=gmail.com at qt-project.org [mailto:
> pyside-bounces+kandraitibold=gmail.com at qt-project.org] *On Behalf Of *William
> Dias
> *Sent:* 2013 April 08, Monday 17:01
> *To:* pyside at qt-project.org
> *Subject:* [PySide] Signal emitted on a worker thread not being received
> by main thread****
>
> ** **
>
> Hi,****
>
> ** **
>
> I am facing an intermittent problem with my PySide application. I have a
> GUI that spawns several threads that are responsible for sending photos to
> a web server. The threads are created as shown bellow:****
>
> ** **
>
> photoConnectionThread = QThread()****
>
> photoConnectionObject = http_connection.PhotoConnection(self.filename)****
>
> photoConnectionObject.photoStatus.connect(self.photoStatus)             **
> **
>
> photoConnectionObject.moveToThread(photoConnectionThread)****
>
> photoConnectionThread.started.connect(photoConnectionObject.work)****
>
> photoConnectionThread.finished.connect(self.threadFinished)****
>
> photoConnectionThread.start()****
>
> ** **
>
> My worker thread tries to upload a photo only once and then emits a signal
> to the main thread so that the status can be updated in a database. ****
>
> ** **
>
> def work(self):****
>
>                         logger.info("photo object created on thread " +
> str(self.thread()))****
>
>                         status = sendPhoto(self.filename)****
>
>                         self.photoStatus.emit(self.filename, status)****
>
>                         QThread.sleep(5)****
>
>                         logger.info("exiting thread " +
> str(self.thread()))****
>
>                         self.thread().exit(0)****
>
> ** **
>
> The problem is that, sporadically, the main thread does not receive the
> signal and consequently doesn't get the status updated.****
>
> ** **
>
> Does anybody have any idea why this is happening?****
>
> ** **
>
> I am using:****
>
> Python 2.7****
>
> PySide 1.1.1****
>
> Windows 7****
>
> ** **
>
> Thank you!****
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.qt-project.org/pipermail/pyside/attachments/20130408/9679fd45/attachment.html>


More information about the PySide mailing list