类似的问题是“如何杀死线程?”
您在线程中创建退出处理程序,该处理程序由线程模块中的锁或事件对象控制。然后,您只需删除锁或向事件对象发出信号。这通知线程应该停止处理并正常退出。在你的主程序信号线后,剩下要做的唯一事情是使用
thread.join()的方法
main,这将等待线程关闭。
一个简短的例子:
import threadingimport timedef timed_output(name, delay, run_event): while run_event.is_set(): time.sleep(delay) print name,": New Message!"def main(): run_event = threading.Event() run_event.set() d1 = 1 t1 = threading.Thread(target = timed_output, args = ("bob",d1,run_event)) d2 = 2 t2 = threading.Thread(target = timed_output, args = ("paul",d2,run_event)) t1.start() time.sleep(.5) t2.start() try: while 1: time.sleep(.1) except KeyboardInterrupt: print "attempting to close threads. Max wait =",max(d1,d2) run_event.clear() t1.join() t2.join() print "threads successfully closed"if __name__ == '__main__': main()如果您确实需要 杀死
线程的功能,请使用多处理。它允许您将SIGTERM发送到各个“进程”(它也与线程模块非常相似)。一般而言,线程是针对您的IO绑定,而多处理则是针对您的处理器的绑定。



