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

版权声明:...........................微信: jjinchengg 欢迎交流.................................... https://blog.csdn.net/q851579181q/article/details/84939406

编写某脚本时需要获取线程中报错信息来做出判断,而线程是不带返回值的。因为线程有独立的栈,线程产生的异常发生在不同的栈上,因此利用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

猜你喜欢

转载自blog.csdn.net/q851579181q/article/details/84939406
今日推荐