【发布时间】:2017-01-15 18:55:44
【问题描述】:
在这个脚本中:
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 真的很陌生,我对堆栈上提出的其他问题的方法不太了解。
【问题讨论】:
-
你想杀死所有线程...这是否包括主线程和应用程序?如果是这样,只需将所有线程设为daemons,然后当您想退出时,使用
sys.exit()。 -
@CristiFati:如果
KeyboardInterrupt被传递到其中一个线程(接收它的线程基本上是随机的 IIRC),那将无济于事。因此需要提醒主线程以便它可以在适当的时间exit。 -
对@ShadowRanger,感谢您指出这一点,线程往往会吞下异常。需要说明的是,当我在处理线程时,我使用相反的方法:在线程的循环中,如果按下了一个键(可以根据键扩展逻辑),则结束它。
-
不可能!插座为外螺纹。设置自动终止的超时值。如何处理
*socket.error?while True是个坏主意,while some_status_bolean更好!
标签: python multithreading python-3.x kill terminate