Обычно это реализуется по следующей схеме (извините, мои навыки Python не так хороши).
У вас есть класс с именем Runner. Этот класс имеет давно работающий метод, который получает необходимую вам информацию. Кроме того, он имеет метод Cancel, который каким-то образом прерывает длительный метод (можно сделать объект запроса url полем члена класса, поэтому класс отмены вызывает эквивалент request.terminate ()).
Длительному методу необходимо принять функцию обратного вызова, которая будет сигнализировать о завершении.
Затем, прежде чем запускать множество потоков, вы создаете экземпляры всех этих объектов этого класса и сохраняете их в списке. В том же цикле вы можете запустить эти долго выполняющиеся методы, передав метод обратного вызова вашей основной программы.
И в методе обратного вызова вы просто просматриваете список всех потоковых классов и вызываете их метод отмены.
Пожалуйста, отредактируйте мой ответ в любой конкретной реализации Python:)