Я делаю кучу GET-запросов примерно к нескольким сотням различных конечных точек API на разных серверах. В одной из этих конечных точек есть некоторая информация, которую я хочу получить и вернуть.
После того, как любой из этих запросов что-то вернет мне, я хочу завершить другие потоки и выйти. Некоторые запросы выполняются почти мгновенно, для некоторых может потребоваться до 20 секунд. sh.
Если я найду информацию за 2 секунды, я не хочу, чтобы прошло 20 секунд, прежде чем я смогу продолжить
В настоящее время я делаю такие вещи:
threads = list()
for s in silos: #here i create all the requests
t = Thread(target=process_request, args=(my, args, here))
t.name = "{} - {}".format(some, name)
threads.append(t)
Затем я делаю:
print("Threads: {}".format(len(threads))) # 100 - 250 of them
[ t.start() for t in threads ]
[ t.join() for t in threads ]
process_request () просто делает запрос на получение и сохраняет результат внутри dict, если status_code == 200. Я использую модули запросов и потоковой передачи.