コードを一定の間隔(デフォルトは1秒)で実行する小さなスクリプトinterruptableloop.pyがあり、実行中にメッセージを画面に送り出し、CTL-Cで送信できる割り込みシグナルをトラップします。
from interruptableLoop import InterruptableLoop
loop=InterruptableLoop(intervalSecs=1) 
while loop.ShouldContinue():
   
   
   pass
スクリプトを実行してから中断すると、次の出力が表示されます(ループのすべてのパスでピリオドが出力されます)。
[py36]$ ./interruptexample.py
CTL-C to stop   (or $kill -s SIGINT pid)
......^C
Exiting at  2018-07-28 14:58:40.359331
interruptableLoop.py:
"""
    Use to create a permanent loop that can be stopped ...
    ... from same terminal where process was started and is running in foreground: 
        CTL-C
    ... from same user account but through a different terminal 
        $ kill -2 <pid> 
        or $ kill -s SIGINT <pid>
"""
import signal
import time
from datetime import datetime as dtt
__all__=["InterruptableLoop",]
class InterruptableLoop:
    def __init__(self,intervalSecs=1,printStatus=True):
        self.intervalSecs=intervalSecs
        self.shouldContinue=True
        self.printStatus=printStatus
        self.interrupted=False
        if self.printStatus:
            print ("CTL-C to stop\t(or $kill -s SIGINT pid)")
        signal.signal(signal.SIGINT, self._StopRunning)
        signal.signal(signal.SIGQUIT, self._Abort)
        signal.signal(signal.SIGTERM, self._Abort)
    def _StopRunning(self, signal, frame):
        self.shouldContinue = False
    def _Abort(self, signal, frame):
        raise 
    def ShouldContinue(self):
        time.sleep(self.intervalSecs)
        if self.shouldContinue and self.printStatus: 
            print( ".",end="",flush=True)
        elif not self.shouldContinue and self.printStatus:
            print ("Exiting at ",dtt.now())
        return self.shouldContinue
     
              
time.sleep(5)下にインデントされたコードがある限り、は必要ありませんwhile True:(pass最小でもかまいません)