在网上看到一堆人解释两者之间的区别,但都是一堆专业术语,而没有从应用场景进行过详细解释。简直是误人子弟的解释,所以今天突然来了兴趣把相关场景在此解释一下。
说到os._exit和sys.exit的本质区别,在应用上,我可以给个简单的例子说明一下:
主要应用在多线程和多进程场景里。
如果你在多个线程里,使用sys.exit,它只会停止当前子现场,而不会对主线程有任何影响。
而你使用os._exit,则将退出整个python解释器,停止工作。
本人已经实验过多线程模式,多进程模式等待其他同学有兴趣的可以进行测试。
测试代码如下:
def worker2(lock):
sys.exit(1)
#os._exit(1)
def worker1(lock):
n = 0
while n<10:
print('worker1')
time.sleep(1)
n+=1
word2Thread = threading.Thread(
target=worker2,
name='work2',
args=(1,)
)
word2Thread.start()
word1Thread = threading.Thread(
target=worker1,
name='work1',
args=(1,)
)
word1Thread.start()
你会发现worker1并不会因为worker2的退出而停止工作。
我们现在换成os._exit试试呢。
你会发现worker1会随着worker2的退出而马上停止工作。