在这个脚本中:
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 的新手,我对堆栈上提出的其他问题的方法不太了解。
原文由 Allexj 发布,翻译遵循 CC BY-SA 4.0 许可协议
不可以。不能强制终止单个线程(这是不安全的,因为它可能会保留锁,导致死锁等)。
做这样的事情的两种方法是:
daemon
线程,主线程等待Event
/Condition
并且退出线程一旦设置Event
或通知Condition
。一旦(唯一)非daemon
线程退出,进程终止,结束所有daemon
线程Event
所有线程间歇性地轮询,因此它们在设置后不久就协同退出。