分享知识 传递快乐
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__()
——————————
如有不足请留言指正
相互学习,共同进步