QAudioOutput constructor hangs in PyQt6

ekhumoro ekhumoro at gmx.com
Sun Apr 12 13:50:21 BST 2026


On 12/04/2026 10:14, Phil Thompson wrote:
> I was able to reproduce the problem on Linux. Usually when something hangs it is due to a deadlock between the GIL and 
> some hidden mutex. Releasing the GIL for the QAudioOutput ctors seems to fix the problem. Your code still hangs of 
> course, but in a different place.

Thanks Phil - that's great to hear. Just to be clear: does your fix apply to the Qt message-handler issue as well? I'm 
hoping your solution can also deal with this minimal test-case:


     import sys, signal
     signal.signal(signal.SIGINT, signal.SIG_DFL)
     from PyQt6.QtCore import QTimer, qInstallMessageHandler
     from PyQt6.QtWidgets import QApplication
     from PyQt6.QtMultimedia import QAudioOutput

     app = QApplication(sys.argv)
     qInstallMessageHandler(lambda mode, ctx, msg: print(msg))
     QTimer.singleShot(100, lambda: QAudioOutput() and print('\nSUCCESS!\n'))
     app.exec()

For me, this only hangs (i.e. does not print 'SUCCESS!') when the message-handler is installed. I assume using a timer 
is just a different way to bypass the deadlock - but that the PyQt message-handler wrapper then reacquires the GIL later 
on when the Qt debug message is encountered, thus reinstating the problem.



More information about the PyQt mailing list