Python 多线程

分享知识  传递快乐

 

Python 中线程常用的有二种方式:实例化 Thread、继承实现

Python3 线程中常用的两个模块为:

  • _thread
  • threading

thread 模块已被废弃。用户可以使用 threading 模块代替。所以,在 Python3 中不能再使用"thread" 模块。为了兼容性,Python3 将 thread 重命名为 "_thread"。
 

 

1、实例化 Thread

Thread 语法:

Thread(target=function, name=threadName, args)

参数说明:

  • target=<function>:要执行的函数
  • name:线程名称
  • args=():元组中只包含一个元素时,需要在元素后面添加逗号

代码1:

from threading import current_thread, Thread
import time

def runFun(num):
    print(num, "子线程 work", current_thread().name)
    time.sleep(2)

if __name__ == '__main__':
    my_thread = Thread(target=runFun, name="my_thread", args=(1,))
    print(my_thread.name)
    my_thread.start()  
    my_thread.join()  
    print("主线程结束")

 

2、继承实现

开发中也是用的最多的,使用面向对象完成,利于功能的扩展。

代码2:

from threading import Thread, current_thread
import time
from utils.PrintLine import pline


# 示例: 1 - 创建线程 - 继承实现 
class MyThread1(Thread):

    def __init__(self, threadName, param1, param2):
        # 这句话不能少
        # name:指定线程名称
        Thread.__init__(self, name=threadName)
        self.param1 = param1
        self.param2 = param2
    
    # 固定方法名,不能随便起
    def run(self):
        print(self.name, ":", self.param1, "-", self.param2)
        print("Run Child Thread, name:", current_thread().name)
        time.sleep(2)


# 示例: 2 - 创建线程 - 继承实现 
class MyThread2(Thread):

    def __init__(self, param1, param2):
        # 这句话不能少
        super(MyThread2, self).__init__()  # 重构run函数必须要写
        self.param1 = param1
        self.param2 = param2
    
    def run(self):
        print(self.name, ":", self.param1, "-", self.param2)
        print("Run Child Thread, name:", current_thread().name)
        time.sleep(2)


if __name__ == '__main__':
    print('主线程开始')
    pline(1, "创建线程 - 继承实现")
    t1 = MyThread1("t1", 1, 2)
    print("t1.name:", t1.name)
    t1.start()
    
    t2 = MyThread1('t2', 3, 4)
    print("t2.name:", t2.name)
    t2.start()
    
    t1.join()
    t2.join()
    pline()
    
    pline(2, "创建线程 - 继承实现")
    t3 = MyThread2(5, 6)
    print("t3.name:", t3.name)
    t3.start()
    t3.join()
    
    t4 = MyThread2(7, 8)
    print("t4.name:", t4.name)
    t4.start()
    t4.join()
    pline()

    print('主进程结束')

注意:如果使用继承的方式实现多线程需要在 __init__() 方法中添加以下语句(任选其一即可):

Thread.__init__(self, name=threadName)

super(MyThread2, self).__init__()  

 

 

 

 

 

——————————
如有不足请留言指正
相互学习,共同进步

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

旷野历程

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值