Мнгновенное прерывание цикла в Python

Я провел некоторые эксперименты и выяснил что цикл while завершается при неистинности условия только после полного окончания выполнения блока внутри цикла. Как можно сделать чтобы такой цикл прерывался в независимости от этапа выполнения вложенного кода, и если это невозможно то какие можно использовать альтернативы, либо во время "эксперимента" я что то упустил и неправильно понял и на самом деле это работает не так?

from threading import Thread
import time

global quit
quit = []

def go():
    time.sleep(25)
    quit.append(5)
    print('go')

def func():
    for i in range(100000000):
        pass


Thread(target=go).start()

while 5 not in quit:
    for i in range(10000000000):
        if i%100000==0:
            print(f'{i} {quit}')
print(quit)

это примерный набросок кода на котором я и ставил эти наблюдения в данном случае после написания в терминалие "go" (то есть добавления числа 5 в список quit, из-за чего по сути цикл должен прерваться) итерация внутри цикла продолжается. К слову отдельный поток функции go тут не причем т.к. эту пятерку в список в итоге она добавляет и ее даже видно при выводе в предпоследней строке.


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

Автор решения: Stanislav Volodarskiy

Прервать нить без её согласия нельзя. Внутренние структуры интерпретатора могут оказаться в несогласованном состоянии. Этой проблеме много лет, и нигде нет метода thread.terminate(). А process.terminate() есть:

import multiprocessing
import time


def f():
    for i in range(10 ** 10):
        if i % 1_000_000 == 0:
            print(i)


if __name__ == '__main__':
    p = multiprocessing.Process(target=f)
    p.start()
    time.sleep(2)
    p.terminate()
    print('terminated')
    p.join()
→ Ссылка