A multiprocessing.Process
может p.terminate()
В тех случаях, когда я хочу убить поток, но не хочу использовать флаги / блокировки / сигналы / семафоры / события / что-то еще, я рекламирую потоки для полномасштабных процессов. Для кода, который использует только несколько потоков, служебные данные не так уж плохи.
Например. это очень удобно, чтобы легко прекратить вспомогательные «потоки», которые выполняют блокировку ввода-вывода
. Преобразование тривиально: в связанном коде замените все threading.Thread
на multiprocessing.Process
и все queue.Queue
на multiprocessing.Queue
и добавьте требуемые вызовы p.terminate()
к вашему родительскому процессу, который хочет убить его ребенка p