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

William Dias william.dias at gmail.com
Tue Apr 9 04:32:45 CEST 2013


Lucas,

Yes, I could, but the question is: why this is not working properly with qt
libraries only? Why the slot is not being called? The weird thing is that
the issue just occurs occasionally. In the last battery of tests I ran,
I've got 149 threads created and only 2 of them didn't make the call to the
slot.


2013/4/8 Lucas Tanure <ltanure at gmail.com>

> Could you use the queue in python ? with Queue.get([*block*[, *timeout*]])
> ?
>
> Lucas A. Tanure Alves
> +55 (19) 88176559
>
>
> On Mon, Apr 8, 2013 at 6:59 PM, William Dias <william.dias at gmail.com>wrote:
>
>> 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!****
>>>
>>
>>
>> _______________________________________________
>> PySide mailing list
>> PySide at qt-project.org
>> http://lists.qt-project.org/mailman/listinfo/pyside
>>
>>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.qt-project.org/pipermail/pyside/attachments/20130408/a0d9e984/attachment.html>


More information about the PySide mailing list