简便方式-获取Python线程的真假返回值

编写某脚本时需要获取线程中报错信息来做出判断,而线程是不带返回值的。因为线程有独立的栈,线程产生的异常发生在不同的栈上,因此利用try..except无法捕捉到线程的报错,也无法获取线程调用的函数的返回值。

网上有利用类的变量来传递线程内的消息,也有使用 Queue 库创建队列实例来传递数据的。但总觉得有些“臃肿”,不太满意。思考着突然豁然开朗,可以在线程运行的函数内部判断端口的连接情况,然后用threading.Event()的标志设置与否,来传递结果,让主函数知道接下来该如何运行。设置了标志说明要进行下一步操作,未设置标志则return退出当前操作。 

就是将原本要传的值,在函数内就做了处理判断,threading.Event()只能向外传递True or False。

关于threading.Event()的基础知识可参考:https://blog.csdn.net/u012067766/article/details/79734630

 

示例:

# -*- coding: utf8 -*-
import threading


def  mm(i,event1):
    
    try:
        i2=i+"str"  #程序会在这里报错
    except:
        if i==9:
            event1.set()


for i in range(0,10):
    
    event1 = threading.Event() 
    
    t1 = threading.Thread(target=mm, args=(i,event1))
    t1.start()

    if not event1.isSet():
        print str(i)+": False"
        
    if event1.isSet():
        print str(i)+": True"

运行结果:

0: False
1: False
2: False
3: False
4: False
5: False
6: False
7: False
8: False
9: False
9: True

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值