Я запускаю фрагмент кода python, в котором несколько потоков выполняются через исполнитель пула потоков. Каждый поток должен выполнять задачу (например, получить веб-страницу). Я хочу иметь возможность завершить все потоки, даже если один из потоков не сработает. Например:
with ThreadPoolExecutor(self._num_threads) as executor:
jobs = []
for path in paths:
kw = {"path": path}
jobs.append(executor.submit(start,**kw))
for job in futures.as_completed(jobs):
result = job.result()
print(result)
def start(*args,**kwargs):
#fetch the page
if(success):
return True
else:
#Signal all threads to stop
Возможно ли это сделать? Результаты, возвращаемые потоками, бесполезны для меня, если все они не будут успешными, поэтому, если хотя бы один из них выйдет из строя, я хотел бы сэкономить некоторое время на выполнение остальных потоков и немедленно их завершить. Фактический код, очевидно, выполняет относительно длинные задачи с парой точек отказа.