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

Spe*_*987 5 python multithreading kill terminate python-3.x

在此脚本中:

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()  
Run Code Online (Sandbox Code Playgroud)

是否可以杀死除键盘中断之外的所有线程?我在网上搜索过,是的,我知道已经有人问过这个问题了,但我对Python真的很陌生,而且我对堆栈上提出的其他问题的方法不太了解。

Sha*_*ger 4

不能。单个线程不能被强制终止(这是不安全的,因为它可能会保留锁,从而导致死锁等)。

做这样的事情有两种方法:

  1. 将所有线程作为daemon线程启动,主线程等待Event/Condition并在其中一个线程设置Event或通知Condition. 一旦(唯一的)非daemon线程退出,进程就会终止,从而结束所有daemon线程
  2. 使用所有线程间歇性轮询的共享Event,因此它们在设置后不久就会协同退出。