Завершение и сохранение данных в потоках
Есть 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 можно вызывать исключение в любом месте из основного потока - но это другое