Рассмотрим следующие строки кода:
import time
import threading
keepAlive = True
def threadHandler():
print('thread started')
while keepAlive:
time.sleep(1)
print('thread ended')
tt = threading.Thread(name='SomeThread',target=threadHandler)
tt.setDaemon(True)
tt.start()
Если я скопирую и вставлю эти строки в ipython, тогда, когда захочу, я могу просто набрать keepAlive = False
, чтобы завершить поток.Что хорошо!
Однако, если я сохраню приведенный выше код в файл с именем foo.py
, а затем запусту его в ipython, выполнив %run foo.py
, выполнение keepAlive = False
в оболочке ipython не даст абсолютно никакого эффекта ипоток просто продолжает выполняться.Это как если бы у threadHandler()
была собственная личная копия значения keepAlive
, когда поток запускался.Есть ли способ решить эту проблему?