В этом сценарии:Как я могу убить все темы?
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] (https://docs.python.org/3.4/library/threading.html#threading.Thread.daemon), а затем, когда вы хотите выйти, используйте 'sys.exit () '. – CristiFati
@CristiFati: Это не поможет, если 'KeyboardInterrupt' доставлен в один из потоков (поток, который получает его, в основном случайный IIRC). Таким образом, необходимо предупредить основной поток, чтобы он мог «выйти» в соответствующее время. – ShadowRanger
Right @ShadowRanger, спасибо за указание на это, потоки, как правило, проглатывают исключения. В качестве примечания, когда я занимаюсь потоками, я использую обратный подход: в цикле потока, если был нажат ключ (логика может быть расширена на основе ключа), завершите ее. – CristiFati