Как остановить потоки при получения данных отличных от None хотя бы из 1 потока?

Для остановки потоков при получении данных, отличных от None хотя бы из одного потока, можно использовать механизм событий (event) или семафоров.

Механизм событий позволяет потоку ждать наступления события и продолжать выполнение только после того, как событие произошло. В Python для работы с событиями используется класс threading.Event(). Каждый поток будет проверять значение события и останавливаться при его наступлении.

Приведу пример кода, демонстрирующий, как остановить потоки при получении данных отличных от None хотя бы из одного потока с использованием механизма событий:

import threading

# Создаем событие
event = threading.Event()

# Функция потока
def thread_function():
    while not event.is_set():
        # Получаем данные 
        data = get_data_from_source()  # Здесь нужно использовать свою функцию получения данных
        if data is not None:
            event.set()  # Устанавливаем событие, если получили данные отличные от None
            break

# Создаем и запускаем потоки
threads = []
for _ in range(num_threads):  # Здесь num_threads - количество потоков, которые нужно запустить
    thread = threading.Thread(target=thread_function)
    thread.start()
    threads.append(thread)

# Ожидаем наступления события
event.wait()

# Останавливаем все потоки
for thread in threads:
    thread.join()

# Продолжаем выполнение после остановки потоков
print("Потоки остановлены")

В данном примере создается событие event, которое изначально не установлено. Каждый поток выполняет функцию thread_function(), которая в цикле проверяет значение события и получает данные. Если данные отличны от None, событие устанавливается и цикл прерывается с помощью break. После наступления события event.wait() блокирует выполнение программы до тех пор, пока событие не будет установлено. Затем все потоки останавливаются с помощью thread.join(), и выполнение продолжается после этого блока.

Как только хотя бы из одного потока будет получено значение отличное от None, остальные потоки будут остановлены и программа продолжит работу.