博客
关于我
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 列表转字典方法
    查看>>
    Python 列表(List)概述-ChatGPT4o作答
    查看>>
    Python 初学者需要知道的四条建议
    查看>>
    Python 判断字符串是否包含子字符串
    查看>>
    python 判断当前时间是否为零点
    查看>>
    python 利用pandas读取本地中CSV文件的指定列 列名重命名 并保存回本地
    查看>>
    python 利用pyspark读取HDFS中CSV文件的指定列 列名重命名 并保存回HDFS
    查看>>
    python 利用pyttsx3文字转语音
    查看>>
    python 利用已有Ner模型进行数据清洗合并
    查看>>
    python 到大数据开发工程师_如何成为一个大数据开发工程师?
    查看>>
    python 加密解密(base64, AES)
    查看>>
    Python 和Java 哪个更适合做自动化测试?
    查看>>
    python 图片转ico
    查看>>
    python 图片转文字、语音转文字、文字转语音保存音频并朗读
    查看>>
    python 在包含类似字符\x16、\x12、\x某某的数组中将以\x开头的字符找出来的方法
    查看>>
    Python 在并行进程之间共享字典
    查看>>
    Python 垃圾收集器文档
    查看>>
    python 基于 wordcloud + jieba + matplotlib 生成词云
    查看>>
    python 基于detectron或mask_rcnn的mask遮罩区域进行图片截取
    查看>>
    Python编程:Tkinter图形界面设计(2)
    查看>>