defdoStress(i, cc): global is_exit idx = i whilenot is_exit: if (idx < 10000000): print"thread[%d]: idx=%d"%(i, idx) idx = idx + cc else: break print"thread[%d] complete."%i
defhandler(signum, frame): global is_exit is_exit = True print"receive a signal %d, is_exit = %d"%(signum, is_exit)
if __name__ == "__main__": signal.signal(signal.SIGINT, handler) signal.signal(signal.SIGTERM, handler) cc = 5 for i inrange(cc): t = threading.Thread(target=doStress, args=(i,cc)) t.start()
threads=[] for i inrange(cc): t = threading.Thread(target=doStress, args=(i, cc)) t.setDaemon(True) threads.append(t) t.start() for i inrange(cc): threads[i].join()
defdoStress(i, cc): global is_exit idx = i whilenot is_exit: if (idx < 10000000): print"thread[%d]: idx=%d"%(i, idx) idx = idx + cc else: break if is_exit: print"receive a signal to exit, thread[%d] stop."%i else: print"thread[%d] complete."%i
defhandler(signum, frame): global is_exit is_exit = True print"receive a signal %d, is_exit = %d"%(signum, is_exit)
if __name__ == "__main__": signal.signal(signal.SIGINT, handler) signal.signal(signal.SIGTERM, handler) cc = 5 threads = [] for i inrange(cc): t = threading.Thread(target=doStress, args=(i,cc)) t.setDaemon(True) threads.append(t) t.start() while1: alive = False for i inrange(cc): alive = alive or threads[i].isAlive() ifnot alive: break