python多线程类threading.Thread重写注意事项

最近用到了python多线程,线程库threading.Thread这个类不支持获取函数返回值,需要重写,参考了网上几篇代码,大多都是直接给了代码没有注释,自定义修改上手不容易,这里分享一下我自己的代码

class BugThread(threading.Thread):
    def __init__(self, target=None, name=None, args=()):
        super(BugThread, self).__init__()  # 父类的初始化方法来初始化继承的属性
        # 自定义初始化参数
        self._target = target
        self._args = args
        self.setName(str(name))
        self._result = -1  # 自定义默认返回类型,防止未join()错误

    # 重定义run函数
    def run(self):
        try:
            if self._target:
                self._result = self._target(*self._args)#子线程执行的函数
        finally:
            del self._target, self._args #如果是单击按钮操作执行子线程,就注释这句代码,不然你的按钮就只能点击一次

    # 新添线程返回值获取
    def bug_result(self):
        return self._result

重写类需要注意3点:

  1. 初始化函数参数的定义:初始化函数只定义自己要用的参数,然后调用父类的初始化来初始化本类,再单独初始化自己需要的参数,可以自定义新的变量接收参数值然后到run函数里面去使用,或者将自定义的参数值赋值给类自带的变量。
  2. run函数的使用:run函数推荐去参考源码的使用方式,自定义一般不用 self._kwargs这个变量,那么del操作就不要包括它,这部分一定要用try形式执行,不然就等着各种崩溃吧:)
  3. 自定义函数和参数名称冲突问题:在自定义新的变量名和函数名时,注意不要和类原有的函数重名(重写函数),自定义变量要在类初始化函数__init__里面,不然没有权限访问
  4. 关于run函数的finally,如果是类似单击按钮执行子线程,就执行用pass语句填充,不要del属性,如果del属性,第二次点击按钮就不能正常执行子线程了

最后,pycharm查看类或函数源码的快捷键“ctrl+B”

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值