[PyQt] pyqt5_enable_new_onexit_scheme vs. threads

Phil Thompson phil at riverbankcomputing.com
Wed Sep 18 22:07:49 BST 2019


On 18/09/2019 18:12, Zach Pincus wrote:
> Hello,
> 
> As requested, I tested out  pyqt5_enable_new_onexit_scheme(True) with
> my application on PyQt 5.13.1.
> 
> At exit, I get the following error:
> QThread: Destroyed while thread is still running
> and a segfault.
> 
> The application spins up a background QThread that currently has no
> provision for exiting on termination. (It exists to upload textures to
> an offscreen OpenGL context, and otherwise is just blocked waiting for
> a new texture to upload.) Without the new onexit scheme, this works
> just fine.
> 
> I'm sure this reveals a design flaw in the original application (the
> thread should probably try to exit cleanly, rather than just die
> during application exit), but this is at least one case where the new
> onexit scheme will cause errors to crop up that did not exist before.
> 
> What would be the best way to make the thread exit cleanly? At atexit
> python callback that sets a flag to make the thread exit and then
> waits on the thread? Or connecting (something?) to the aboutToQuit
> signal that does the same? Or should the new onexit scheme not touch
> threads in the first place?

The latter option would be trivial to implement. Given that deleting a 
running thread is guaranteed to cause a crash then it makes sense to 
avoid that if possible - even if the root cause is an application design 
bug.

Phil


More information about the PyQt mailing list