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('线程执行结束')