python 多线程 简介

本文介绍了Python中的多线程概念,包括单线程与多线程的区别,以及Threading模块的三种实现方式:直接使用Thread类、通过可调用类和派生自Thread类。重点展示了如何使用这些方法创建并管理多线程任务。
摘要由CSDN通过智能技术生成

python多线程简介

多线程的概念是相对单线程而言的。所谓单线程是指CPU在处理完成一项任务之前是不会开始处理第二件任务的。简单来说,单线程在执行任务时是有一定的顺序的。而随着科技的进步,CPU等计算机组件的升级换代日新月异,CPU处理速度越来越快,可以并行处理多个任务,可以这样简单地理解多线程的工作模式。

在python中,多线程相关的模块主要有Thread、Threading、Queue。其中Thread是多线程的底层支持模块,一般不建议使用。Threading模块对Thread模块进行了封装,实现了线程的一些操作对象化。而Queue实现了多生产者、多消费者的队列模式。

Threading模块实现多线程方式一:

# coding = utf-8

import threading
import time
from time import sleep


# 定义多线程要使用的函数
def display_name(username):
    sleep(2)
    print('用户名为:', username)


if __name__ == '__main__':
    t1 = threading.Thread(target=display_name, args=('小王',))
    t2 = threading.Thread(target=display_name, args=('小张',))
    start_time = time.time()
    t1.start()	# start方法启动线程
    t2.start()
    end_time = time.time()
    print('运行时间:', end_time - start_time)
    print('\n线程操作结束')

Threading模块实现多线程方式二:用可调用类作为参数实例化Thread类
与第一种方式最大的区别是 声明了一个可调用类。

# coding = utf-8

import threading
from time import sleep


def display_name(username):
    sleep(2)
    print('用户名为:', username)


class MyThread(object):
    def __init__(self, func, args, name=''):
        self.func = func
        self.args = args
        self.name = name

    def __call__(self):
        self.func(self.args)


if __name__ == '__main__':
    t1 = threading.Thread(target=MyThread(func=display_name, args='小王'))
    t2 = threading.Thread(target=MyThread(func=display_name, args=('小张',)))
    t1.start()
    t2.start()
    print('线程执行结束')

Threading模块实现多线程方式三:Thread类派生子类(重写run方法)
用此方式实现多线程是比较简洁的,也是比较推荐的。多线程的类采用直接继承threading.Thread的方式来继承得到相应的方法和属性。

# coding = utf-8

import threading
from time import sleep

def display_name(username):
    sleep(2)
    print('用户名为:', username)


class MyThread(threading.Thread):
    def __init__(self, func, args):
        super(MyThread, self).__init__()
        self.func = func
        self.args = args

    def run(self) -> None:
        print('ThreadName:', self.name)
        self.func(self.args)


if __name__ == '__main__':
    t1 = MyThread(func=display_name, args=('小王',))
    t2 = MyThread(func=display_name, args='小张')
    t1.start()
    t2.start()
    print('线程执行结束')
  • 7
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值