Подебажила предоставленный код:
1. программа не зависает, а "не быстро" проверяет открытые порты
попробуйте подебажить/вывести лог в методе check_open_ports и станет ясно, что после обнаружения все доступных ip адресов она опрашивает все порты и это занимает время, много времени
2. + так же в коде увидела двойную "финализацию" `self.finalize_scan()`. Она вызывается в update_progress (после >= 100%) и после выхода из цикла for в методе scan_network, что приводит к двойному сканированию портов