Python 如何杀死所有线程?

Python 如何杀死所有线程?,python,multithreading,python-3.x,kill,terminate,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((

在此脚本中:

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()  

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

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

这样做的两种方法是:

  • 让所有线程作为
    守护进程启动
    线程,主线程等待
    事件
    /
    条件
    ,并在其中一个线程设置
    事件
    或通知
    条件时退出。只要(唯一的)非
    守护进程
    线程退出,进程就会终止,从而结束所有
    守护进程
    线程
  • 使用所有线程间歇轮询的共享
    事件
    ,以便它们在设置后不久协同退出

  • 你想杀死所有的线程。。。这是否包括主线程以及应用程序?如果是这样,只需创建所有线程,然后当您想要退出时,使用
    sys.exit()
    @CristiFati:如果
    键盘中断
    被传递到其中一个线程(接收它的线程基本上是随机IIRC),这将不会有帮助。因此,需要提醒主线程,以便它可以在适当的时间退出。值得注意的是,当我处理线程时,我使用了相反的方法:在线程的循环中,如果按下一个键(逻辑可以根据键展开),就结束它。不可能!插座为外螺纹。设置自动终止的超时值。如何处理套接字错误<代码>虽然是真的
    是个坏主意,
    而一些状态
    更好!谢谢你的回答。我在这里看到了2种方法:但我真的不知道如何将它实现到我的send()类中。我正在Linuxso上运行?任何人都可以帮助我,否则就不可能在keybord interrupt中添加杀死线程?@allexj:你不能杀死线程,就像我已经说过的那样。使用共享的
    事件
    ,将
    更改为True:
    ,而不是myevent.is_set():
    ,并停止在循环内使用除之外的裸
    事件(它将捕获键盘中断
    阻止您处理它;捕获
    异常
    或类似事件)。然后,当捕捉到
    KeyboardInterrupt
    时,调用
    myevent.set()
    ,通知所有其他线程在下一个循环中停止处理。这并不是很难适应,如果它不能立即工作,试着玩一下。