Це може бути дурним запитанням, але я перевіряю деякі свої припущення щодо Python, і я збентежений, чому наступний фрагмент коду не виходить при виклику в потоці, а виходить при виклику в основному потоці.
import sys, time
from threading import Thread
def testexit():
time.sleep(5)
sys.exit()
print "post thread exit"
t = Thread(target = testexit)
t.start()
t.join()
print "pre main exit, post thread exit"
sys.exit()
print "post main exit"
У документах для sys.exit () зазначено, що виклик повинен вийти з Python. З результатів роботи цієї програми я бачу, що "вихід потоку після виходу" ніколи не друкується, але основний потік просто продовжує працювати навіть після того, як потік викликає вихід.
Чи створюється окремий екземпляр інтерпретатора для кожного потоку, а виклик exit () просто виходить із цього окремого екземпляра? Якщо так, то як реалізація потоків управляє доступом до спільних ресурсів? Що, якби я хотів вийти з програми з потоку (не те, що я насправді хочу, але просто так, щоб я зрозумів)?