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()
,通知所有其他线程在下一个循环中停止处理。这并不是很难适应,如果它不能立即工作,试着玩一下。