gevg
возможно и правильнее, но лично мне неособо понятнее
Это же Ваш код, я только имена полей изменил :)
# имена хостов, номера портов и прочее лучше хранить в каком-нибудь конфиге,
# а не в тексте скрипта. Объект clients - это некое подобие конфига
clients = (("host.example", "6666", "1"), ("host2.example", "7777", "2"))
# событие, указывающее на необходимость завершения работы потоков
finished = threading.Event()
# создаем рабочие потоки
# threads = [Client(*(x + (finished,))) for x in clients]
# запишем вышеприведенный код более многословно
threads = []
for host, port, numb in clients:
threads.append(Client(host, port, numb, finished))
# даем потокам поработать 30 секунд
time.sleep(30)
# сигналим о том, что хотим завершить работу
finished.set()
# дожидаемся корректного завершения всех потоков
for thread in threads:
thread.join()