Многопоточность - залог успеха, советую почитать
эту статью, уверен, что ни раз пригодится
Тем не менее, решение твоей проблемы довольно простое, с помощью модуля
multiprocessing в отдельном процессе запускаешь функцию, которая будет слушать нажатия клавиш и завершать процесс по его PID:
import os
import signal
import keyboard
import multiprocessing
def hook(pid):
while True:
if keyboard.is_pressed('ctrl + 1'):
os.kill(pid,signal.SIGTERM)
os._exit(1)
if __name__ == '__main__':
pid = os.getpid()
multiprocessing.Process(target=hook,args=[pid]).start()
#-----------------------------------------------------#
#Здесь располагай свой код
# -----------------------------------------------------#
Конечно, можно также использовать модуль
threading, но я более чем уверен , что будут проблемы с
GIL, поэтому
multiprocessing - это лучший вариант