python多线程简介
多线程的概念是相对单线程而言的。所谓单线程是指CPU在处理完成一项任务之前是不会开始处理第二件任务的。简单来说,单线程在执行任务时是有一定的顺序的。而随着科技的进步,CPU等计算机组件的升级换代日新月异,CPU处理速度越来越快,可以并行处理多个任务,可以这样简单地理解多线程的工作模式。
在python中,多线程相关的模块主要有Thread、Threading、Queue。其中Thread是多线程的底层支持模块,一般不建议使用。Threading模块对Thread模块进行了封装,实现了线程的一些操作对象化。而Queue实现了多生产者、多消费者的队列模式。
Threading模块实现多线程方式一:
# coding = utf-8import 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-8import threading
from time import sleepdef display_name(username):sleep(2)print('用户名为:', username)class MyThread(object):def __init__(self, func, args, name=''):self.func = funcself.args = argsself.name = namedef __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-8import threading
from time import sleepdef display_name(username):sleep(2)print('用户名为:', username)class MyThread(threading.Thread):def __init__(self, func, args):super(MyThread, self).__init__()self.func = funcself.args = argsdef 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('线程执行结束')