rendered paste body#!/usr/bin/pythonimport threading, time, signalclass WorkThread( threading.Thread ): def __init__(self): threading.Thread.__init__(self) self._wantStop = False self._safeStop = True def shutdown(self): self._wantStop = True def run(self): while 1: if self._wantStop: break self._safeStop = False dostuff() self._safeStop = True time.sleep(3)def signalHandler(signal, frame): global worker if not worker._wantStop: worker.shutdown() while worker.isAlive(): print 'waiting on worker' time.sleep(1) else: print 'user insisted we stop now' print 'worker finished' def dostuff(): print 'hello' time.sleep(3)if __name__ == '__main__': worker = WorkThread() signal.signal(signal.SIGINT, signalHandler) worker.start()