博客
关于我
Python基础——多线程值从Thread类继承
阅读量:796 次
发布时间:2023-03-07

本文共 1711 字,大约阅读时间需要 5 分钟。

在上一节中,我们学习了如何通过封装Thread类来实现线程编程。然而,这种方法并不常见,通常我们更倾向于从Thread派生一个子类,并在该类中包含线程相关的代码。这种方法更为灵活,也更符合常见的编程实践。以下是具体的代码示例:

上一节介绍了封装Thread类的对象

这一次学习一种更常用的封装方法,从Thread派生一个子类,然后将线程有关代码放到此类中

这种常规做法非常常见,先看代码:

# ——创建时间:2019.3.2——
# 多线程
import threading
from time import ctime, sleep
class MyThread(threading.Thread):
# 重写父类构造方法
# 三个参数名称分别是线程函数名、线程函数参数、线程名
def __init__(self, func, args, name=''):
# 调用父类构造方法,并传入参数
super().__init__(target=func, name=name, args=args)
# 重写父类run方法
def run(self):
self._target(*self._args)
def fun(self, index, sec):
print('开始执行', index, '时间', ctime())
sleep(sec)
print('执行完毕', index, '时间', ctime())
def main():
print('开始', ctime())
thread1 = MyThread(fun, (10, 4), '线程一')
thread2 = MyThread(fun, (20, 2), '线程二')
thread1.start()
thread2.start()
print(thread1.name)
print(thread2.name)
thread1.join()
thread2.join()
if __name__ == '__main__':
main()

有bug?让我想想

在上述代码中,我们定义了一个名为MyThread的子类,继承自threading.Thread。为了方便起见,我们重写了Thread类的构造方法和run方法。以下是需要注意的几点:

  • 构造方法的参数顺序:在Python中,Thread类的构造方法定义为def __init__(self, target=None, args=(None,), name='Thread-<N>')。因此,在我们的MyThread类中,__init__方法的参数顺序应与Thread类的构造方法保持一致。即,target参数应放在args之前。

  • 线程执行目标:在run方法中,我们直接调用了self._target(*self._args)。如果目标函数需要更多的参数,需要确保args中包含足够的参数。

  • 线程名称和参数的传递:在创建MyThread实例时,需要正确传递目标函数和参数。例如,在main()函数中,我们传递了fun函数以及相关参数。

  • 线程启动和等待:确保调用start()方法启动线程,并在main()函数中调用join()方法等待线程完成,以避免程序结束后线程未完成任务。

  • 如果发现上述代码存在问题,可能是因为在__init__方法中参数的传递顺序不正确,或者目标函数未能正确接收参数。建议在编写多线程代码时,仔细检查参数传递和线程目标的定义是否正确。

    如果你发现具体错误,可以提供更多日志信息或错误提示,我可以帮助你进一步分析和解决问题。

    转载地址:http://blofk.baihongyu.com/

    你可能感兴趣的文章
    Python基础——MySQL数据库基本操作
    查看>>
    Python基础_列表 list
    查看>>
    python系列【仅供参考】:python异步库调用gevent和asyncio对比
    查看>>
    python基础3
    查看>>
    Python基础08 面向对象的基本概念
    查看>>
    python系列【仅供参考】:python二进制转10进制
    查看>>
    Python基础-函数篇
    查看>>
    python基础---->常用模块
    查看>>
    Python基础(2):控制结构
    查看>>
    Python基础 | 关于“循环”那些事
    查看>>
    python系列【仅供参考】:python之subprocess模块rsync拉取文件
    查看>>
    python系列【仅供参考】:python 远程rdp
    查看>>
    python基础
    查看>>
    Python基本语法与变量类型
    查看>>
    python基本数据类型(容器)- tuple list dict set
    查看>>
    python基本工资的调整方案_Python薪资又涨了!这可咋办!
    查看>>
    Python基准测试和性能分析内存管理和垃圾回收
    查看>>
    Python基于RESTful风格的接口自动化测试实战
    查看>>
    python基于pygame实现跨年烟花效果
    查看>>
    python基于flask搭建http服务(四)—— Docker容器化部署
    查看>>