<html><head><meta http-equiv="content-type" content="text/html; charset=utf-8"></head><body dir="auto"><div></div><div>You can get into trouble when QObject derivatives are deleted during last-pass garbage collection at interpreter exit.</div><div><br></div><div>As you say, in a well designed application, this is generally avoidable.  If you have background QThreads or tricky Python QObject derivative reference loops, gracefully stop and del everything problematic in response to the QApplication.instance().aboutToQuit signal.  Another tier of cleanup is provided by the atexit lib; registered atexit calls are executed after aboutToQuit but before the chaos of interpreter shutdown armageddon, making them useful for cleaning up pure Python stuff used by your Qt code.</div><div><br></div><div>Cheers,</div><div>Erik</div><div><br>On Aug 15, 2016, at 15:11, Carl Wolff <<a href="mailto:carl@wolff-online.nl">carl@wolff-online.nl</a>> wrote:<br><br></div><blockquote type="cite"><div><p dir="ltr">Hello,</p>
<p dir="ltr">I succesfully applied sip. setdestroyonexit on a fairly large pyqt4 application suffering from occasional crashes at exit time.</p>
<p dir="ltr">My question is twofold:<br>
- why is destroyonexit not set to False by default;<br>
- Is it (theoretically) possible to live without using this sip call? E.g. by adhering to guidelines regarding pyqt wrapper/qt ownership and qt/python garbage collection? When I read the API documentation of sip.setdestroyonexit carefully, I get the impression that it is impossible to live without this sip call.</p>
<p dir="ltr">Best regards,<br>
Carl</p>
</div></blockquote><blockquote type="cite"><div><span>_______________________________________________</span><br><span>PyQt mailing list    <a href="mailto:PyQt@riverbankcomputing.com">PyQt@riverbankcomputing.com</a></span><br><span><a href="https://www.riverbankcomputing.com/mailman/listinfo/pyqt">https://www.riverbankcomputing.com/mailman/listinfo/pyqt</a></span></div></blockquote></body></html>