#!/usr/bin/env python import sys import random import time from PySide2 import QtCore wait = QtCore.QWaitCondition() mutex = QtCore.QMutex() class Producer(QtCore.QThread): def run(self): while True: print("Producer loop hit, waiting for next signal") with QtCore.QMutexLocker(mutex): # time.sleep(5) # doesn't crash wait.wait(mutex) # crashes class Consumer(QtCore.QThread): def run(self): while True: secs = random.randint(1, 10) print(f"Sleep thread sleeping {secs}secs") time.sleep(secs) wait.wakeOne() if __name__ == "__main__": app = QtCore.QCoreApplication(sys.argv) producer = Producer() consumer = Consumer() producer.start() consumer.start() #producer.wait() # crashes #consumer.wait()