python子线程调用主线程方法函数_在python子线程中调用sys.exit的效果?

在python子线程中调用sys.exit函数,是什么效果?先说结论:如果没有捕获SystemExit异常,子线程退出,主线程还在继续该干嘛干嘛;如果在线程中有代码捕获了SystemExit异常,子线程都可以不退出。(在python脚本中使用sys.exit函数)

我们一般在python交互式的解释器中使用exit会quit退出,而在python脚本中使用sys.exit函数退出程序。现在的问题是在python的子线程中使用sys.exit函数,答案是,可以退出子线程,但不影响主线程的运行。

下面这个测试程序,有兴趣的同学可以自己试试看:

import os

import sys

import time

import threading

gNum = 0

def test():

global gNum

while True:

print('i am in test')

gNum += 1

if gNum == 10: sys.exit(123)

time.sleep(1)

tt = threading.Thread(target=test)

tt.start()

tt.join()

for i in range(10):

print('main thread end')

time.sleep(1)

子线程test会打印10遍,然后退出,接着主线程在打印它的内容10遍。你如果把sys.exit换成os._exit,主线程的10遍打印,就看不到了。

所以,如果要在子线程中直接中断整个程序的运行,只有os._exit可以选(exit和quit也不行,他们跟sys.exit一样,只是常常在交互式场景下使用),但这是个不好的设计!使用os._exit直接退出python解释器,什么清理工作都不做。应该在主线程中通过sys.exit函数来结束程序,在主线程中判断各子线程的执行状态和结果。

-- EOF --

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值