我怎样才能杀死所有线程?
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 中真的很新,而且我对堆栈上提出的这些其他问题的方法不太了解。
没有。无法强制终止单个线程(这是不安全的,因为它可能会保留锁,导致死锁等)。
执行此类操作的两种方法是:
- 将所有线程作为
daemon
线程启动,主线程等待 Event
/Condition
并在其中一个线程设置 Event
或通知 Condition
。一旦(唯一的)非daemon
线程退出,进程终止,结束所有daemon
线程
- 使用所有线程间歇性轮询的共享
Event
,以便它们在设置后不久协作退出。
在这个脚本中:
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 中真的很新,而且我对堆栈上提出的这些其他问题的方法不太了解。
没有。无法强制终止单个线程(这是不安全的,因为它可能会保留锁,导致死锁等)。
执行此类操作的两种方法是:
- 将所有线程作为
daemon
线程启动,主线程等待Event
/Condition
并在其中一个线程设置Event
或通知Condition
。一旦(唯一的)非daemon
线程退出,进程终止,结束所有daemon
线程 - 使用所有线程间歇性轮询的共享
Event
,以便它们在设置后不久协作退出。