Чтобы гарантировать, что функция Python вызывается при завершении процесса, в целом (с участием или без участия Qt ;-), вы можете использовать модуль atexit стандартной библиотеки Python:
import atexit
def whatever(): ...
atexit.register(whatever)
Из соображений благоразумия я бы порекомендовал не использовать связанный метод вместо функции для этой цели - он "должен" работать, но фаза разрушения процесса всегда несколько деликатна, и чем проще вы ее сохраните, тем лучше.
atexit
, конечно, не сработает при достаточно сложном сбое процесса (например, если процесс завершается с kill -9
, тогда по определению это не дает шанса запустить любой код завершения) - операционная система следит за этим ;-). Если вам нужно справиться с каким-либо сбоем, независимо от того, насколько сложно это сделать из отдельного «сторожевого» процесса, это существенно более сложная проблема.