我该如何杀死所有线程?

时间:2016-09-08 00:20:32

标签: python multithreading python-3.x kill terminate

在此脚本中:

import threading, socket    

class send(threading.Thread):

    def run(self):
        try:
            while True:
                try:
                    s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
                    s.connect((url,port))
                    s.send(b"Hello world!")
                    print ("Request Sent!")
                except:
                    s.close()
        except KeyboardInterrupt:
            # here i'd like to kill all threads if possible

for x in range(800):
    send().start()  

是否可以杀死KeyboardInterrupt以外的所有线程?我已经在网上搜索了,是的,我知道它已经被问到了,但我在python中真的很新,而且我在堆栈上问这些其他问题的方法并不顺利

1 个答案:

答案 0 :(得分:1)

没有。单个线程不能被强行终止(它不安全,因为它可能会保留锁定,导致死锁等)。

这样做的两种方法是:

  1. 将所有线程作为daemon线程启动,主线程在Event / Condition上等待,并在其中一个线程设置Event时立即退出通知Condition。一旦(唯一的)非daemon线程退出,结束所有daemon线程
  2. ,该过程就会终止
  3. 使用所有线程间歇性轮询的共享Event,以便它们在设置后立即合作退出。