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