我怎样才能杀死所有线程?

How can I kill all threads?

在这个脚本中:

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. 将所有线程作为 daemon 线程启动,主线程等待 Event/Condition 并在其中一个线程设置 Event 或通知 Condition。一旦(唯一的)非daemon线程退出,进程终止,结束所有daemon线程
  2. 使用所有线程间歇性轮询的共享 Event,以便它们在设置后不久协作退出。