Завершение и сохранение данных в потоках

Есть 3 потока, которые выполняют некую функцию. В функции изменяются списки. Стоит задача, по команде останавливать все потоки, а изменения в этих списках сохранять.

Код

t1 = threading.Thread(target=final, args=(block1, block_out1,))
t2 = threading.Thread(target=final, args=(block2, block_out2,))
t3 = threading.Thread(target=final, args=(block3, block_out3,))
t1.start()
t2.start()
t3.start()

Как я понимаю, мне нужен 4 поток, который будет отслеживать input команды остановки. Как завершить потоки и сохранить данные? Была идея завершать процесс python через os, но это выглядит, как не очень элегантное решение.


Ответы (1 шт):

Автор решения: eri
def final(b_in, b_out, ev) :
    for a in b_in:
        if ev.is_set():
            break # или raise Exception('canceled') 
        # Работа

event = threading.Event()

t1 = threading.Thread(target=final, args=(block1, block_out1, event)) 
t1.start()

if input() == 'stop' :
    event.set()

t1.join()

# вывод

Както так

Пс. пишу с телефона..

В асинхронных заданиях asincio.Task можно вызывать исключение в любом месте из основного потока - но это другое

→ Ссылка